मेरे पास मेरे कोड में एक विशिष्ट क्वेरी है जिसे सभी संबंधित इकाइयों (दोनों -> 1 एफके और -> एन एफके) को लोड करने की आवश्यकता है क्योंकि संदर्भ ठीक उसी के बाद निपटान किया जाएगा ।ईएफ कोड प्रथम: वैकल्पिक संबंधों पर काम नहीं करना
मैंने एक सामान्य "क्वेरी" विधि बनाई है जो params Expression<Func<MyItem, object>>[] includes
लेता है और फिर आंतरिक रूप से उन्हें चेन करता है। वह हिस्सा ठीक काम करता है।
क्वेरी इस तरह दिखता है:
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 के विन्यास में रखा) के लिए मानचित्रण:
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
सब शामिल
, केवल SubChildNotWorking
नहीं करता ' वास्तव में काम नहीं करते हैं। डीबगर के साथ लौटे ऑब्जेक्ट का निरीक्षण करते समय, मैं सभी गुणों पर प्रॉक्सी देखता हूं। प्रॉक्सी खोलना मुझे अन्य सभी रिश्तों के लिए सही डेटा देता है, और SubChildNotWorking
संपत्ति के लिए "ऑब्जेक्ट कॉन्टेक्स्ट को पहले से ही अपवाद का निपटारा कर दिया गया है"।
एकमात्र अंतर जो मैं स्पॉट करने में सक्षम था वह यह है कि SubChildNotWorking
एक निरर्थक एफके (डीबी पर निरर्थक कॉलम और dbcontext में वैकल्पिक कॉन्फ़िगरेशन के साथ) है जबकि अन्य सभी गैर-अनुपलब्ध FKs WithRequired के साथ कॉन्फ़िगर किए गए हैं।
डेटाबेस एक विरासत डीबी भी है जो पहले कोड के साथ नहीं बनाया गया है और इसके सम्मेलनों का पालन नहीं करता है, मैंने अभी डीबीकॉन्टेक्स्ट में मैपिंग की है। बाकी सब कुछ ठीक काम करता है।
मैं यह पता लगाने की कोशिश कर रहा हूं कि उत्सुक लोडिंग शून्य से एफके पर काम नहीं करती है लेकिन मुझे इसके बारे में कोई दस्तावेज नहीं मिला।
क्या यह एक बग, या इच्छित व्यवहार है? लेकिन सबसे अधिक, मैं इसे कैसे हल करूं?
धन्यवाद।
अगर आप केवल 'अन्य subchildren बिना SubChildNotWorking' शामिल क्या होता है? क्या यह तब काम करता है? – Slauma
नहीं। या तो काम नहीं करता है। –
क्या आप जांच सकते हैं कि एसक्यूएल सही दिखता है ('var sql = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking) के साथ)। ToString();') और मैन्युअल रूप से क्वेरी का परीक्षण करें एसएसएमएस अगर यह अपेक्षित परिणाम पंक्तियों को वापस करता है। –
Slauma