我需要使用EF Code First插入大约2500行数据。
我的原始代码看起来像这样:
这只需要大约4秒钟就可以运行。然而,
但我很好奇是否有其他人知道使用EF Code First进行批量插入的有效方法?
我的原始代码看起来像这样:
foreach(var item in listOfItemsToBeAdded)
{
//biz logic
context.MyStuff.Add(i);
}
这花费了很长时间。每个DBSet.Add()
调用大约需要2.2秒,相当于90分钟。
我将代码重构为以下形式:
var tempItemList = new List<MyStuff>();
foreach(var item in listOfItemsToBeAdded)
{
//biz logic
tempItemList.Add(item)
}
context.MyStuff.ToList().AddRange(tempItemList);
这只需要大约4秒钟就可以运行。然而,
.ToList()
查询了表中当前所有的项,这是极其必要的,但从长远来看可能会很危险甚至更加耗时。一种解决方法是像这样做:context.MyStuff.Where(x=>x.ID = *空guid*).AddRange(tempItemList)
,因为我知道永远不会返回任何内容。但我很好奇是否有其他人知道使用EF Code First进行批量插入的有效方法?
List<T>
中,并未直接添加到上下文中... - Reed Copsey