EF Code First を使用して約 2500 行を挿入する必要があります。
私の元のコードは次のようになりました。
foreach(var item in listOfItemsToBeAdded)
{
//biz logic
context.MyStuff.Add(i);
}
これには非常に長い時間がかかりました。1 回の通話にかかる時間は約 2.2 秒で、DBSet.Add()
約 90 分に相当します。
コードを次のようにリファクタリングしました。
var tempItemList = new List<MyStuff>();
foreach(var item in listOfItemsToBeAdded)
{
//biz logic
tempItemList.Add(item)
}
context.MyStuff.ToList().AddRange(tempItemList);
これは、実行に約 4 秒しかかかりません。ただし、.ToList()
現在テーブルにあるすべてのアイテムをクエリします。これは非常に必要であり、長期的には危険であり、さらに時間がかかる可能性があります。1つの回避策はcontext.MyStuff.Where(x=>x.ID = *empty guid*).AddRange(tempItemList)
、何も返されないことがわかっているため、次のようにすることです。
しかし、EF Code First を使用して一括挿入する効率的な方法を他の誰かが知っているかどうか、私は興味がありますか?