我正在使用Entity Framework代码优先插入相对大量的记录(250K记录,只有2列)的项目。
但是将所有记录写入数据库需要花费太多时间(2~3小时)!
是因为实体框架很慢,有大量或记录或什么?
P.S。
代码段:
foreach (var t in myCollection)
{
Db.Words.Add(t);
Db.SaveChanges();
}
答案 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();