2012-04-11 17 views
9

Tüm ilgili varlıkları (her ikisi -> 1 FKs ve -> N FK) yüklemek isteyen kodumda belirli bir sorgum var çünkü içerik bundan hemen sonra atılacak. .EF Kodu: İsteğe bağlı ilişkide çalışmaz dahil et

params Expression<Func<MyItem, object>>[] includes numaralı genel bir "Sorgu" yöntemini kullandım ve sonra bunları dahili olarak zincirler. Bu bölüm iyi çalışıyor.

sorgu şuna benzer:

var item = facade.Query<MyItem>(
       c => c.Childs.Select(x => x.Parent), 
       c => c.Childs.Select(x => x.SubChild1), 
       c => c.Childs.Select(x => x.SubChildNotWorking), 
       c => c.Childs.Select(x => x.SubChild2), 
       c => c.Childs.Select(x => x.SubChild3), 
       c => c.Childs.Select(x => x.SubChildrens) 
       ).FirstOrDefault(c => c.Name == name); 

(SubChildNotWorking yapılandırmasına yerleştirilen) çalışmıyor özellik için haritalama: içermektedir tüm Of

this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey); 

, sadece SubChildNotWorking doesn' Aslında işe yarıyor. Geri dönen nesne ile hata ayıklayıcısını denetlerken, tüm özelliklerdeki proxy'leri görüyorum. Proxy'leri açmak bana tüm diğer ilişkiler için doğru veriyi verir ve SubChildNotWorking özelliği için "Objectcontext zaten istisna kaldırılmıştır".

I nokta mümkün tek fark diğerleri WithRequired yapılandırılmış olmayan null FKs ise SubChildNotWorking (DBContext DB ve WithOptional yapılandırmasına null kolonla) null FK olmasıdır.

Veritabanı ayrıca Kod İlk ile oluşturulmayan ve onun kurallarını izlemeyen eski bir DB'dir, ben yalnızca eşlemeleri DbContext dosyasında yaptım. Her şey iyi çalışıyor.

Nezaketsiz FK'lerde istekli yüklemelerin işe yarayıp yaramadığını anlamaya çalışıyorum ama bu konuda herhangi bir belge bulamadım.

Bu bir hata mı, yoksa amaçlanan davranış mı? Ama en önemlisi bunu nasıl çözebilirim?

Teşekkürler.

+0

? O zaman işe yarıyor mu? – Slauma

+0

Hayır. Ya işe yaramıyor. –

+1

SQL'in doğru görüp görmediğini kontrol edebilirsiniz (var sql = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking)) ToString(); ') ve sorguyu el ile sınayın. SSMS beklenen sonuç satırlarını döndürürse. – Slauma

cevap

0

size sınıf (varlıklar) üzerinde

[DataContract] 

tanımlamak mü? Eğer öyleyse,

[DataMember] 

ile SubChild açıklama unutmayın yoksa yüklü ama varlıkları üzerinde GET çağrısı yaparken görünmüyor sonunda olabilir.

0

Dahil etme yöntemiyle çalışırken, istekli yük kalıbı hakkında konuşuyorsunuz. İlişkileri olan varlıklar koleksiyon olarak yüklenir. Nükleer olmayan herhangi bir yabancı anahtar için, boşluğa başlayan önemsiz bir koleksiyon var, ancak boş olanlar için, yok. İlk Kodda gezinme özelliğini sanal yapabilirsiniz, ancak sizin durumunuz değil. Örneğin, Bağlam doğrudan yüklemek deneyebilirsiniz:

var someEntity = context.someEntities.Find(1); 
context.Entry(someEntity).Reference(e => e.EntityWithFKNullable).Load(); 

veya daha kısa versiyon:

diğer subchildren olmadan sadece `SubChildNotWorking` dahil ne olur
context.EntitiesWithFKNullable.Load();