插入许多父记录和子记录的最快方法

时间:2016-04-13 17:53:45

标签: entity-framework azure-sql-database bulkinsert

我发现这篇文章有助于批处理插入Fastest Way of Inserting in Entity Framework,但是,我想知道是否有更有效的方法来插入包含子实体的记录。

我的实体是这样的:

enter image description here

我一直在试验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();
}

1 个答案:

答案 0 :(得分:3)

免责声明:我是项目所有者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);
}