实体框架更新10万条记录
本文关键字:记录 10万 更新 框架 实体 | 更新日期: 2023-09-27 18:23:53
我使用的是带有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更新记录的有效方法的想法?
编辑
我还使用了实体框架中插入的最快方法中提供的技术,它们最终导致"存储更新、插入或删除语句影响了意外的行数(0)"错误。
EF不是为大规模更新而设计的,它是为查询和事务更新(一次只更新几条记录)而设计的。
如果您需要大量更新数据,那么要么编写一个SQL语句来执行所有更新,要么使用像SSIS这样的ETL工具。