2016-04-13 14 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