2017-02-20 18 views
5

Öğe Çerçeve toplu ekleme/güncelleştirme/silme işlemleri üzerinde çok yavaş olabilir. AutoDetectChanges ve/veya ValidateOnSaveEnabled'ı kapatmak için sık sık önerilen öneriler bile her zaman yardımcı olmaz.Z.EntityFramework.Extensions için ticari olmayan bir alternatif var mı?

NuGet'teki Z.EntityFramework.Extensions'a rastladım, ancak yalnızca belirli bir süre çalışacak bir ticari ürün gibi görünüyor.

https://www.nuget.org/packages/Z.EntityFramework.Extensions/

Şimdiye kadar, ben gerçekten sadece BulkInsert(), BulkUpdate() ve BulkDelete() gerekir.

Sorum şu: Z.EntityFramework.Extensions hemen hemen aynı yapar herhangi güvenilir ticari olmayan kütüphane,

var mı?

Herhangi bir ipucu için teşekkürler!

+0

toplu güncelleştirme için ve kullanabileceğiniz https silin: // github com/loresoft/EntityFramework.Extended. Toplu ekleme için - her 100 veya daha fazla varlık için yeni bir bağlam oluşturun. Yani bağlam oluşturun, 100 ekleyin, değişiklikleri kaydedin. Sonra yeni bir tane oluşturun, sonraki 100'ü ekleyin, değişiklikleri kaydedin. Tüm bunları işlem kapsamına yazın. Bu, toplu iş eki değil, aynı bağlam örneğinde tüm varlıkları eklemek daha hızlı olacaktır. – Evk

+0

Genel olarak ORM'ler, toplu işlemlere çok daha az hacimli kesici uçlar için * NOT * * uygundur. Bir kamyon dolusu çakıl taşını taşımak için cımbız kullanmak gibi. Bunu herhangi bir uzatma ile karşılayamazsın. Toplu ekler için en iyi seçenek, * gerçek *, minimal olarak kaydedilmiş, akışlı toplu ekleme işlemini gerçekleştirmek için SqlBulkCopy kullanmaktır. Toplu güncellemeleri gerçekleştirmek istiyorsanız, yalnızca UPDATE ifadesini kullanın.Harici kaynaklardan * UPSERT * istiyorsanız, her şeyi bir hazırlama tablosuna aktarın ve hedef tabloyu güncellemek için MERGE kullanın –

+0

Diğer bir deyişle, güvenilir olmayan, güvenilir olmayan, ölçeklenemeyen bir işlemi güvenilir bir şekle dönüştürebilecek bir şey arıyorsanız bir. Neden güvenilir, ölçeklenebilir süreci başlangıçta kullanmayın? –

cevap

2

Yasal Uyarı: Ben Haklısınız Entity Framework Extensions

sahibiyim. Bu ticari bir üründür.

Her ay ücretsiz deneme sürümü mevcuttur, ancak ürünü üretim ortamı için satın almanız gerekir.

Toplu

BulkInsert, bazı ücretsiz alternatifler vardır takın ama dikkatli olun, hepsi inheritances & dernek desteklemez ve artık desteklenmez:

Yasal Uyarı: Ben & & Toplu Sil Toplu Güncelleme için Entity Framework Plus

sahibi değilim, bu kütüphaneyi kullanabilirsiniz:

// DELETE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Delete(); 

// UPDATE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Update(x => new User() { IsSoftDeleted = 1 }); 
+0

Teşekkür ederim, Jonathan. Bunu geçerli bir cevap olarak işaretleyeceğim, çünkü böyle bir ürünün sahibi olarak diğer rakipler hakkında iyi bir genel bakışa sahip olduğunuzu düşünüyorum. Gerçekten üzgün, EF Plus’ta bir eklenti yok, ama sanırım ticari ürüne bir miktar ayrım olmalı. – Michael

+1

Maalesef, bazı açık kaynak özellikler sunmaya çalıştık, ancak bu iş modeli işe yaramıyor. Yani evet, her iki kütüphane arasında bir ayrım yapmamız gerekiyor. Açık kaynak/ücretsiz projeler çoğu zaman bir süreden sonra desteklenememektedir çünkü maliyet/zaman/karmaşıklık daha fazla kullanıcı tarafından kullanıldığı için önemli ölçüde artmaktadır. Örneğin, geçen sene bu ücretsiz kütüphane, diğer kütüphanelerimizin bir araya gelmesinden daha fazla destek almamızı sağladı! –

+0

Merhaba Michael, SqlBulkTools'u araştırmanız sırasında görüp görmediğinizi merak ediyor musunuz? –

İlgili konular