我正在尝试使用EF6 MVC在60个字段中插入大约2000-5000条记录。
这是我的代码:
using (var db = new MyEntities())
{
using (var transaction = db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
try
{
db.Database.CommandTimeout = 180;
// ToInsertStatement is an ExtensionMethod
// which generates a sql INSERT statement from list of entities
// in *N* batch size.
// INSERT INTO tbl values(),()*N*(); INSERT INTO...
db.Database.ExecuteSqlCommand(entitiesList.ToInsertStatement(20));
// Some other changes
db.SaveChanges();
transaction.Commit();
}
catch (Exception exception)
{
transaction.Rollback();
}
}
}
根据Admir的answer,我发送每20条记录一个INSERT语句,幸运的是ExecuteSqlCommand
只需要6秒。但是SaveChanges()
需要大约2分钟!
我如何克服这个问题?