我有以下设置:
我在循环中添加行,就像那样(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有问题?
答案 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
。