2011-11-02 16 views
5

EF varlıklarını json nesnelerine dönüştürürken dairesel referanslarla ilgili bazı sorunlar yaşıyorum. Benim için çalışan bir çözüm buldum, ama im İlki almak için yeterli gibi görünüyorEF varlıklarını merkezileştirme; Proxy Oluşturma ve Tembel Yükleme devre dışı bırakılıyor?

context.ContextOptions.ProxyCreationEnabled = false; 

ve/veya

context.ContextOptions.LazyLoadingEnabled = false; 

eklerken gerçekte neler olduğunu öğrenmek istiyorum tek boyutlu json nesnesi. İkisini de kullanmalı mıyım? Ve aslında ne yapıyorlar? Bunun etrafında daha akıllı bir yolu var mı? Teşekkürler

+0

Son yazınızdan, JavaScriptSerializer kullandığınızı fark ettim. Bunun için belirli bir neden var mı? Bu bir web uygulaması için mi? DataContractJsonSerializer veya Json.NET kütüphanesi gibi jsonunuzu almanın farklı bir yaklaşımını kullanmanız gerektiğini düşünüyorum. –

+0

@SeanThoman json.net kullanmayı denedim, ancak yine de dairesel referans istisnası var. Bu normal bir asp.net 4.0 web formları uygulaması. DataContractJsonSerializer'ı kullanarak herhangi bir örnek var mı? – Johan

cevap

6

İlk satır, varlık sınıfınızı devralan sınıfın çalışma zamanı neslini kapatır. Bu sınıf, çalışma zamanı sırasında gerçekten kullanılır. Sınıfın değil. Bu çalışma zamanı oluşturulmuş sınıf muhtemelen Seri hale getirilemez ve bu yüzden bu satır (proxy üretimini kapatarak) serileştirme işi yapar.

İkinci satır, tembel yüklemeyi kapatır. Diyelim ki Ebeveyn varlığınız ve Çocuk varlığınız var. Ebeveyn için sorduğunuzda, tembel yükleme açıkken Çocuklar yüklenmez. Ebeveyni yüklediğinizde kapalı olduğunda, tüm çocuklarını yüklersiniz. EF kullanıyorsanız, bunun bilmeniz gereken bir şey olduğunu düşünüyorum.

Düzenleme: Döngüsel referansta sorun varsa, o zaman tembel yükleme özelliğini kapatmalısınız. Daha sonra, Ana seriyi serileştirdiğinizde, Ana'ya referans veren Çocukları serileştirmeyi denemeyeceksiniz (döngüsel referans oluşturarak)

+0

Tamam, ama tembel yükleme işlemini devre dışı bırakmalı mıyım? – Johan

+0

Dediğin gibi. İlk satır yeterlidir. –

+0

Evet, sadece tembel yükleme işlevini devre dışı bırakmanın neden yeterli olduğunu anlamıyorum. Bu ilişkiyi diğer varlıklar ile kaldırmak değil mi? – Johan

İlgili konular