我需要使用 EF Code First 插入大约 2500 行。
我的原始代码看起来像这样:
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 = *empty guid*).AddRange(tempItemList)
因为那时我知道永远不会有任何回报。
但我很好奇是否有其他人知道使用 EF Code First 进行批量插入的有效方法?