ÇevreEF/çocuk varlıkları kapsayacak şekilde LINQ nasıl çift yönlü bir ilişki
Ben Framework 4.0 Varlık Framework 5 kullanıyorum varken. (Bu aslında EF 4.4 kullanıyorum anlamına gelir). Birimler olarak bir N-Katmanı uygulamasında çalışıyorum çünkü STE (Kendini İzleme Varlıkları) kullanıyorum. Bir veritabanı odaklı yaklaşım kullanıyoruz çünkü EF oyunda daha sonra tanıtıldı.
Bağlam
ben hem birbirlerine bir navigasyon özelliği vardır 2 Varlıkları var. (EntityA, EntityB'ye ve EntityB'ye EntityA'ya yönelik bir navigasyon özelliğine sahiptir). İlişki 'EntityA> Bire Birden Çok> EntityB' dir. Çocuk varlıkları bir LINQ ifadesiyle yüklemek istediğimde INCLUDE (STE => Eager Loading) kullanmam gerekiyor çünkü tüm verileri birkaç katmandan geçireceğim.
kod İşte
onun EntityB çocuklu EntityA çağırmak benim koddur.
using (var ctx = new MyEntities())
{
var result = (from s in ctx.EntityA.Include("EntityB")
where s.Id = 11111
orderby s.TimeUpdated descending
select s)
.Take(10)
.ToList();
return result;
}
hata
System.StackOverflowException { mevcut iplik yığın taşması durumunda olduğundan ifade değerlendiremez.} I uzaklaştırmak zaman bir hata var
'DAHİL'. Sanırım neden basittir. EntityA'yı EntityB çocuk kayıtlarıyla yüklemek istiyorum, EntityB kayıtları ana EntityA'yı her zaman ve EntityA'yı yüklemek istiyor ... Sanırım herkes burada sonsuz döngüyü anlıyor.
Benim çözümler veya alternatifler
- benim EDMX dosyasına gidip EntityB içinde EntityA için navigasyon özelliğini kaldırın. Şimdi EntityA hakkında veriyi yüklemek istiyorsam, emrimi için bir EntityB var. Ayrı bir DB isteği yapmam gerekiyor ve katmanlarıma geçmek için kullanacağım 2 farklı nesneye sahibim.
- Aşağıdakileri kullanmaktan kaçının, EntityA'yı ayrı olarak yükleyin ve EntityA'm'a başvuran benim EntityB'nin Navigasyon özelliğine aktarın.
soru
orada daha iyi alternatifler var ya da benim durumda bu sorunu gidermek için yaklaşımlar? Teklif ettiğim ya da yapmadığım alternatiflerimden birine devam etmeli miyim? Çünkü daha iyi ve daha temiz bir çözüm olmasını umuyordum.
Sana "Sen Include
kullanabilirsiniz" ama belli ki bu durumda size yardım etmez söylemek için geldim
Ian
+1 debug olamaz var. –
Sorununuzu EF 5 (Visual Studio 2012) içinde yeniden oluşturmaya çalıştım ve herhangi bir hata alamıyorum. Soruna neden olabilecek başka bir şey var mı? Basit bir POCO kurulumu ile mi çalışıyor? (Sidenote .. Daha önce STE ile çalıştım ve şimdi onları engellemeye çalışıyorum. STE'yi kullanmak istediğinizden emin misiniz?) –
Hatayı yeniden oluşturamıyorum (EF5, .NET 4.0). Stacktrace'i göndermek ve belki de hassas verileri silmek mümkün mü? –