实体框架更新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)"错误。

实体框架更新10万条记录

EF不是为大规模更新而设计的,它是为查询和事务更新(一次只更新几条记录)而设计的。

如果您需要大量更新数据,那么要么编写一个SQL语句来执行所有更新,要么使用像SSIS这样的ETL工具。