使用Entity Framework写入大量记录需要花费太多时间

时间:2017-05-15 14:25:27

标签: c# .net database entity-framework

我正在使用Entity Framework代码优先插入相对大量的记录(250K记录,只有2列)的项目。

但是将所有记录写入数据库需要花费太多时间(2~3小时)!

是因为实体框架很慢,有大量或记录或什么?

P.S。

代码段:

foreach (var t in myCollection)
{      
  Db.Words.Add(t);
  Db.SaveChanges();
}

2 个答案:

答案 0 :(得分:5)

实体框架不适合批量操作。即使在最后执行Context.SaveChanges()(或每100条记录或其他内容)。

using (var context = new MyContext()) 
{
    // This might speed up things a little aswell
    context.Configuration.AutoDetectChangesEnabled = false;

    // As might this (if applicable for your situation)
    context.Configuration.ValidateOnSaveEnabled = false;
}

为了获得最佳性能,您可能希望使用与存储过程相近的数据库,或者如果必须在代码中,请直接使用ADO.NET。

SqlBulkCopy可能正是您想要的。

答案 1 :(得分:2)

将它们全部添加到循环中,然后在结尾处保存一次

  foreach (var t in myCollection)
  {      
      Db.Words.Add(t);
  }

  Db.SaveChanges();