实体框架 - 添加75k行需要多长时间?

时间:2013-11-18 15:15:27

标签: c# entity-framework

我有以下设置:

  • 表1 - 目前150k行,需要再添加25k行,
  • 表2 - 300k行,需要再添加50k。

我在循环中添加行,就像那样(EF代码优先):

using (var context = new MyDb())
{
  loop() //25k rounds
  {
    var t3 = new Table2();
    var t2 = new Table2();
    var t1 = new Table1{prop1 = t2, prop2 = t3};
    context.Table1.Add(t1);
    context.SaveChanges();
  }
}

因此,循环总共需要25k转,而我的性能测量结果显示,它将在大约十小时中添加这些行!现在我不知道是不是因为这是EF的这种操作的正常时间,还是因为我的dbms有问题?

2 个答案:

答案 0 :(得分:4)

看一下类似问题的答案

Fastest Way of Inserting in Entity Framework

问题在于,每次绕过循环,您都会将更改保存到数据库,这会导致25k db写入而不是仅仅一次

答案 1 :(得分:3)

EF不是为高效批量更新/插入而设计的。我建议使用另一种方法,如BCP(命令行实用程序从文本文件导入),SqlBulkCopy形式C#(它基本上是BCP的.NET包装器,或者像SSIS这样的ETL工具。< / p>

如果您生成程序中的数据(而不是从另一个位置复制它),那么您可以尝试构建INSERT SQL命令并使用SqlCommand