我正在使用带有SQLCE数据库的EF6,其中几个表每个都有超过200K的记录。我试图更新其中一个表中的记录,但不幸的是,使用下面的方法更新过程非常慢:
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中提供的技术,最终导致&#34;存储更新,插入或删除语句影响了意外的行数(0)。“错误。< / p>
答案 0 :(得分:3)
EF不是为大规模更新而设计的 - 它专为查询和事务更新而设计(一次只有几条记录)。
如果您需要批量更新数据,则编写将执行所有更新的SQL语句或使用SSIS等ETL工具。