【问题标题】:Fastest way of inserting many parent and child records插入许多父子记录的最快方法
【发布时间】:2016-04-13 17:53:44
【问题描述】:

我发现这篇文章有助于批量插入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();
}

【问题讨论】:

  • 你为什么同时打电话给AddRangeBulkInsert?您应该选择其中之一,因为它们都执行相同的操作..
  • @SteveGreene From BulkInsert:“要将批量插入与 DbContext 结合,必须使用 TransactionScope。”

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多