【问题标题】:Entity Framework Updating 100K Records [duplicate]实体框架更新 10 万条记录 [重复]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 我知道,但是我正在寻找使用 EF 最快的方法。
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多