我正在使用EF6與SQLCE數據庫與幾個表中有超過200K記錄每個。我想在這些表的一個更新的記錄,但不幸的是,更新過程是使用波紋管的方法很慢:實體框架更新100K記錄
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
db.SaveChanges();
}
我嘗試第二種方法是實際從數據庫中獲得的所有記錄,然後做比較在內存中,通過以導致列表循環後更新數據庫:
foreach (var _data in comparedList)
{
using (var db = new MyContext())
{
db.Users.Attach(data);
var entry = context.Entry(data);
entry.Property(p => p.Forename).IsModified = true;
context.SaveChanges();
}
}
有關使用EF更新記錄的有效方法你知道嗎?
編輯
我也用在Fastest Way of Inserting in Entity Framework他們最終導致了「商店更新,插入或刪除語句影響了意外的行數(0)。」的錯誤呈現技術。
在完成更新所有記錄之前,不要調用SaveChanges()。 – 2014-09-22 19:14:36
使用接受用戶標識作爲參數的存儲過程。它速度更快,並使用數據庫引擎進行批量更新。 – user3514987 2014-09-22 19:58:53
我建議改變你的問題來完整地再現問題。然後ping我,我會重新打開帖子。 – 2014-09-22 21:40:16