我已經寫了一些代碼,應該檢查一行是否已經存在,如果沒有,就添加它,如果存在,它會添加它。之後它調用SaveChanges()函數。我只是想知道我是否做得對。使用實體框架在1次調用中添加/更新很多行
這是我的代碼。
using (var ctx = _context)
{
foreach (var item in objects)
{
Object existingRow = ctx.Objects.Where(x => x.Id == item.Id).FirstOrDefault();
if (existingRow != null)
existingRow = item;
else
ctx.Objects.Add(item);
}
ctx.SaveChanges();
}
這裏是_context
我的上下文到數據庫。
這樣做是否正確?執行SaveChanges()
真的會導致只有1個調用,即使我添加了很多對象的上下文?
對象是一個可以有1000+個對象一樣大的列表。
非常感謝您的幫助!
的SaveChanges將導致一個呼叫的方式,但「ctx.Objects.Where(X => X .Id == item.Id).FirstOrDefault()「也將導致對數據庫的查詢,並且對於1000個對象,這將是1000個調用。 – Evk
檢查對象是否已經存在而不進行這些調用的最佳方法是什麼? – RandomStranger
好吧,來自@SlavaUtesinov的回答是有效的,但現在已被刪除,不幸的是。您也可以使用AddRange(yourItems)將多個項目一次添加到上下文中(但即使使用AutoDetectChangesEnabled,它仍然是完全有效的答案),而不是更改AutoDetectChangesEnabled。 – Evk