2016-04-13 38 views
0

Bu makaleyi yığın ekleri Fastest Way of Inserting in Entity Framework yapmayla ilgili faydalı buldum, ancak çocuk varlıklarla da kayıt eklemenin daha etkili bir yolu olup olmadığını merak ediyorum. ancak yaklaşık 40 kayıtları Her biri çok sayıda çocuk için hala yaklaşık 60 saniye olduğunuBirçok üst ve alt kayıt eklemek için en hızlı yol

enter image description here

Ben BulkInsert deneme oldum ve onu başarımı ciddi biraz geliştirmek gibi görünüyor:

Benim varlıklar böyledir varlıklar. Binlerce kayıt eklemem gereken vakalarım var ve aşırı derecede yavaşlayabilir.

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

Hem "AddRange" hem de "BulkInsert" öğesini neden arıyorsunuz? Bunlardan birini seçmelisiniz, çünkü ikisi de aynı işlemi yapıyorlar .. – shlatchz

+0

@SteveGreene BulkInsert'ten: "DbContext ile bulk inserti birleştirmek için TransactionScope kullanılmalıdır." – tqrecords

cevap

3

Destek: şöyle Benim kodudur ben proje İşte Entity Framework Extensions

, ekleme güncelleme, silme ve birleştirme için hızlı yoludur sahibiyim. Hatta daha kolay ve SaveChanges üzerinden BulkSaveChanges kullanabilirsiniz.

// 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

Harika bir iş adamı sorgumu 8 saniyeye indirdi! – tqrecords