【发布时间】:2014-11-16 20:33:42
【问题描述】:
我将 EF6 与 SQLCE 数据库一起使用,其中很少有表,每个表都有超过 20 万条记录。我正在尝试更新其中一个表中的记录,但不幸的是,使用以下方法更新过程非常缓慢:
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()。 -
使用接受用户 ID 作为参数的存储过程。它速度更快,并且使用数据库引擎进行批量更新。
-
我建议更改您的问题以完整再现问题。然后 ping 我,我将重新打开帖子。
标签: c# entity-framework