पर्यावरणएफई/LINQ कैसे बच्चे संस्थाओं को शामिल करने के जब वहाँ एक द्विदिश संबंध
मैं फ्रेमवर्क 4.0 पर इकाई की रूपरेखा 5 का उपयोग कर रहा है। (इसका मतलब है कि मैं वास्तव में ईएफ 4.4 का उपयोग कर रहा हूँ)। इकाइयों के रूप में मैं एसटीई (सेल्फ ट्रैकिंग एंटिटीज) का उपयोग करता हूं क्योंकि मैं एन-टियर एप्लिकेशन में काम कर रहा हूं। हम डेटाबेस संचालित दृष्टिकोण का उपयोग करते हैं क्योंकि बाद में गेम में ईएफ पेश किया गया था।
प्रसंग
2 संस्थाओं है कि दोनों एक दूसरे के लिए एक नेविगेशन संपत्ति है की है। (एंटिटीए में एंटिटीबी के लिए एक नेविगेशन प्रॉपर्टी है, और एंटिटीबी एंटिटीए में एक है)। संबंध 'EntityA> One-TO-Many> EntityB' है। जब मैं एक LINQ अभिव्यक्ति के माध्यम से बाल संस्थाओं को लोड करना चाहता हूं, तो मुझे INCLUDE (STE => उत्सुक लोडिंग) का उपयोग करने की आवश्यकता है क्योंकि मैं सभी डेटा को कई स्तरों को पार कर दूंगा।
कोड
यहाँ अपने EntityB बच्चों के साथ EntityA कॉल करने के लिए मेरे कोड है।
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;
}
त्रुटि
System.StackOverflowException {अभिव्यक्ति का मूल्यांकन नहीं कर सकता क्योंकि वर्तमान धागा एक ढेर अतिप्रवाह स्थिति में है।}
कोई त्रुटि है जब मैं हटाने 'शामिल'। मुझे लगता है कि कारण सरल है। मैं एंटीटीए को चाइल्ड रिकॉर्ड्स एंटीटीबी के साथ लोड करना चाहता हूं, एंटिटीबी रिकॉर्ड हर बार अपने माता-पिता एंटिटीए को लोड करना चाहता है, और एंटिटीए ... मुझे लगता है कि हर कोई अनंत लूप को समझता है।
मेरे समाधान या विकल्प
- मैं अपने edmx फ़ाइल के पास जाकर EntityB में EntityA के लिए नेविगेशन संपत्ति को हटा दें। अगर अब मैं एंटिटीए के बारे में डेटा लोड करना चाहता हूं, जबकि मेरे पास मेरे निपटारे में एंटिटीबी है। मुझे एक अलग डीबी अनुरोध करने की ज़रूरत है और मेरे पास 2 अलग-अलग ऑब्जेक्ट्स हैं जिन्हें मुझे अपने स्तरों को कम करना है।
- शामिल करने से बचें, एंटीटीए को अलग से लोड करें और इसे मेरे एंटिटीबी की नेविगेशन प्रॉपर्टी में दबाएं जो मेरी एंटीटीए को संदर्भित करता है।
सवाल
वहाँ बेहतर विकल्प हैं या मेरी स्थिति में इसे ठीक करने के दृष्टिकोण? क्या मुझे अपने विकल्पों में से एक के साथ प्रस्तावित किया जाना चाहिए या नहीं? क्योंकि मैं एक बेहतर और क्लीनर समाधान की उम्मीद कर रहा था।
मैं अपना समय
इयान
+1 आप के लिए एक बहुत अच्छा (1) प्रश्न के लिए की है। –
मैंने ईएफ 5 (विजुअल स्टूडियो 2012) में अपनी समस्या को पुन: पेश करने का प्रयास किया और मुझे कोई त्रुटि नहीं मिली। क्या कोई और चीज है जो आपकी समस्या का कारण बन सकती है? क्या यह एक साधारण पॉको सेटअप के साथ काम कर रहा है? (Sidenote .. मैंने पहले एसटीई के साथ काम किया है और अब मैं वास्तव में उनसे बचने की कोशिश कर रहा हूं। क्या आप वाकई एसटीई का उपयोग करना चाहते हैं?) –
मैं त्रुटि को पुन: उत्पन्न नहीं कर सकता (ईएफ 5, .NET 4.0)। क्या स्टैकट्रैक पोस्ट करना संभव है और शायद संवेदनशील डेटा खाली हो सकता है? –