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

C# 实体框架-添加75k行需要多长时间?,c#,entity-framework,C#,Entity Framework,我有以下设置: 表1-150k行当前,需要再添加25k行 表2-300k行,需要再添加50k行 我在循环中添加行,如下所示(EF代码优先): 因此,循环总共需要25k圈,我的性能测量显示,它将在大约十个小时内添加这些行!现在我不知道这是因为这是EF进行此类操作的正常时间,还是因为我的dbms有问题?EF不是为高效批量更新/插入而设计的。我建议使用另一种方法,如BCP(从文本文件导入的命令行实用程序)、SqlBulkCopyform C#(基本上是BCP的.NET包装器,或者SSIS之类的ET

我有以下设置:

  • 表1-150k行当前,需要再添加25k行
  • 表2-300k行,需要再添加50k行
我在循环中添加行,如下所示(EF代码优先):


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

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


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

查看此类似问题的答案


问题是,每次循环都要将更改保存到数据库,这会导致25k的数据库写入,而不仅仅是一次写入

这是一次性的吗?如果是,EF可能不是最佳选择。但我将投票决定是否关闭,因为这样做需要多长时间取决于很多因素,例如数据库类型/大小/设计/表是否被索引等,我认为太多了,无法给出任何有用的答案。我想你不应该每次
保存更改
。可能会在1k块中执行此操作?移动
保存更改
外部循环?@JMK:我还可以使用什么?由于问题的复杂性,SQL不是这里的选项(在上面的例子中,我显然缩短了很多)我不确定生成SQL语句并直接将它们发送给SQL解释器是否会简单得多。您也没有告诉我们db是否处于生产性使用状态。我没有这样看,这肯定会有帮助,谢谢!您应该包括摘要、引用、相关代码或为实现此功能而修改的代码示例。不是只是一个链接和你得到的简短摘要。我会研究一下,可能会有用,谢谢!
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();
  }
}