2016-04-13 16 views
0

我发现这篇文章对批量插入有帮助Fastest Way of Inserting in Entity Framework,但是,我想知道是否有更有效的方式插入带有子实体的记录。插入许多父母和孩子记录的最快方法

我的实体是这样的:

enter image description here

我一直在尝试与BulkInsert,它似乎提高性能一点,但它仍然是大约60秒,约40条记录每一个具有多个子实体。我有些情况下需要插入数千条记录,并且速度非常慢。我的代码如下:

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(); 
} 
+0

你为什么要调用'AddRange'和'BulkInsert'?您应该选择其中一个,因为它们都执行相同的操作。 – shlatchz

+0

@SteveGreene从BulkInsert:“要将批量插入与DbContext结合,必须使用TransactionScope。” – tqrecords

回答

3

免责声明:我的项目Entity Framework Extensions

这里是插入,更新,删除和合并的最快方法的所有者。您甚至可以使它更容易,并通过SaveChanges使用BulkSaveChanges。

// 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); 
} 
+2

伟大的工作人把我的查询降低到8秒! – tqrecords