2012-01-30 18 views
13

Tip kalıtım başına tablo içeren DB modelim var. Örneğin, varlıklar A, B, C, A1, A2'dir. Temel - A Türetilmiş - A1, A2. Başka bir - B, C. Yani A'nın A1 ve A2'ye 1 ila 1 bağıntısı vardır. B ve C, sırasıyla DB ve DB tarafındaki OnDelete eylemiyle (A1'den A2'ye kadar) ilişkilendirmelere sahiptir.Öğe çerçevesindeki kaskad silme (tür başına kalıtım başına tablo)

Sorun

Ben B'den kaydını silmeye çalışırken, bu yüzden EF aynı zamanda mevcut B'nin kaydına ilişkili tüm A1 nesneleri kaldırmak bekliyoruz. Sonunda

, EF A1 B ve ilgili tüm kayıtların kaydı kaldırmak değil Neden bir

den? nasıl tamir edersin?

+0

herhangi bir öneriniz var mı? Bence bu önemsiz bir problem. – Developex

cevap

7

Bu bilinen bir sorundur ve ben buna bir hata derim. Açıkçası, yalnızca türetilmiş varlıkların özellikleri için tabloyu A1 tablosundan silme doğru olamaz. Veritabanındaki kalan veriler (tablo A) başka bir nesne tipini temsil eder. Başka bir deyişle: Bu DELETE aslında bir varlığı silmedi, ancak varlığın türünü değiştirdi = A1 türünde bir nesneyi A türünde bir nesneye dönüştürdü - bu, A'un soyut bir varlık olması durumunda daha az mantıklı.

here dan önerilen geçici çözüm (Anladığım kadarıyla) çirkin:

var b = context.Bs.Include("A1s").Single(b => b.Id == 1); 
foreach (var a1 in b.A1s.ToList()) 
    context.As.Remove(a1); 
context.Bs.Remove(b); 
context.SaveChanges(); 

context.As.Remove(a1);

böylece masanın A yetim kayıtların sorunun çözümü, hem A ve A1 tablodan silmeniz gerekir. Ne yazık ki, ebeveynleri doğru şekilde silmek için çocukları veritabanından yüklemeye zorlanıyorsunuz. İşte

bu sorunla ilgili başka bir soru ve cevabı: Ben de aynı sorun vardı Problems using TPT (Table Per Type) in EF 4.2 and deletion of parent objects

+0

Teşekkürler! mictosoft'un ekibi bu hatayı biliyor mu? :) ne zaman tamir edileceğini biliyor musun? çünkü bu yaklaşım çok çirkin. ama çalışıyor :) – Developex

+0

@ user861108: Hayır, ne zaman tamir edileceğini bilmiyorum. MS'nin problemi bir hata olarak görüp görmediğini bile bilmiyorum. – Slauma

+0

Bu durumda, başka bir tipte miras kullanırsak, her şey iyi olur diye düşünüyorum. Tip kalıtım başına tablo kullandım. Belki de Hiyerarşi Tablosu'nu kullanacaksam bu sorun ortaya çıkmayacaktır. Ne düşünüyorsun ? – Developex

0

ve meslektaşı (o) çıkarın yapmadan önce öğelerin koleksiyonu üzerinde yineleme söyledi ve birden her çalıştı.

İlgili konular