实体框架更新100K记录

时间:2014-09-22 19:12:15

标签: c# entity-framework

我正在使用带有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>

1 个答案:

答案 0 :(得分:3)

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

如果您需要批量更新数据,则编写将执行所有更新的SQL语句或使用SSIS等ETL工具。