插入许多父子记录的最快方法
Fastest way of inserting many parent and child records
我发现这篇文章对批量插入很有帮助Fastest Way of Inserting in Entity Framework,但是,我想知道是否还有更有效的方法来插入包含子实体的记录。
我的实体是这样的:
我一直在试验 BulkInsert,它似乎稍微提高了性能,但是对于大约 40 条记录,每条记录都有多个子实体,它仍然需要大约 60 秒。在某些情况下,我需要插入数千条记录,而且速度可能会非常慢。我的代码如下:
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 15, 0)))
{
using (var db = new MyDBContext())
{
db.Configuration.AutoDetectChangesEnabled = false;
var entities = db.ScenarioCategory.AddRange(categories);
db.BulkInsert(entities);
db.SaveChanges();
}
transactionScope.Complete();
}
免责声明:我是项目的所有者Entity Framework Extensions
这是最快的插入、更新、删除和合并方式。您甚至可以更轻松地使用 BulkSaveChanges 而不是 SaveChanges。
// Using BulkSaveChanges
using (var db = new MyDBContext())
{
db.ScenarioCategory.AddRange(categories);
db.BulkSaveChanges();
}
// Using BulkInsert on parent then child
using (var db = new MyDBContext())
{
db.BulkInsert(categories);
db.BulkInsert(categories.SelectMany(x => x.Items);
}
我发现这篇文章对批量插入很有帮助Fastest Way of Inserting in Entity Framework,但是,我想知道是否还有更有效的方法来插入包含子实体的记录。
我的实体是这样的:
我一直在试验 BulkInsert,它似乎稍微提高了性能,但是对于大约 40 条记录,每条记录都有多个子实体,它仍然需要大约 60 秒。在某些情况下,我需要插入数千条记录,而且速度可能会非常慢。我的代码如下:
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 15, 0)))
{
using (var db = new MyDBContext())
{
db.Configuration.AutoDetectChangesEnabled = false;
var entities = db.ScenarioCategory.AddRange(categories);
db.BulkInsert(entities);
db.SaveChanges();
}
transactionScope.Complete();
}
免责声明:我是项目的所有者Entity Framework Extensions
这是最快的插入、更新、删除和合并方式。您甚至可以更轻松地使用 BulkSaveChanges 而不是 SaveChanges。
// Using BulkSaveChanges
using (var db = new MyDBContext())
{
db.ScenarioCategory.AddRange(categories);
db.BulkSaveChanges();
}
// Using BulkInsert on parent then child
using (var db = new MyDBContext())
{
db.BulkInsert(categories);
db.BulkInsert(categories.SelectMany(x => x.Items);
}