13

मैं अपने .NET Framework (EF6) कोड को एएसपी.नेट कोर (ईएफ कोर) में स्थानांतरित कर रहा हूं, और मैंने इस मुद्दे पर ठोकर खाई।ईएफ कोर का उपयोग करने के बाद जंक्शन तालिका में

EF6 में मैं शामिल करें का उपयोग() और चयन() उत्सुक लोडिंग के लिए: यहाँ कुछ उदाहरण कोड है

return _context.Post 
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests)) 

PostAuthor एक जंक्शन तालिका है और वहाँ भी एक जंक्शन तालिका "AuthorInterest" है जो मैं ईएफ 6 में शामिल करने की आवश्यकता नहीं थी (चयन सीधे एक के लिए जाता है। रुचि)।

वैसे भी, मैं देख सकता हूं कि ईएफ 7 में यह फिर से काम किया गया है, जिसका अर्थ है कि मुझे अब नेस्टेड प्रश्नों के लिए ThenInclude() का उपयोग करना चाहिए। हालांकि ...

return _context.Post 
    .Include(p => p.PostAuthor) 
    .ThenInclude(pa => pa.Select(pa2 => pa2.Author)) 
...etc 

उपरोक्त कोड चयन() कथन के कारण विफल रहता है। https://docs.efproject.net/en/latest/querying/related-data.html पर प्रलेखन का सुझाव है कि मुझे इसकी आवश्यकता नहीं है और मैं तुरंत लेखक तक पहुंच सकता हूं, लेकिन मुझे अंतिम लैम्ब्डा में आईसीओलेक्शन दिखाई देता है, इसलिए मुझे स्पष्ट रूप से चयन() की आवश्यकता है। मैं क्वेरी में कई जंक्शन टेबलों के माध्यम से आगे जाता हूं, लेकिन सादगी के लिए, चलिए बस पहले पर ध्यान केंद्रित करते हैं।

मैं यह काम कैसे कर सकता हूं?

उत्तर

22

लेकिन मैं) पिछले लैम्ब्डा में एक ICollection दिखाया गया हो, तो मैं स्पष्ट रूप से चयन करें (जरूरत

नहीं, आप ऐसा नहीं करते। ईएफ कोर Include/ThenInclude EF6 में उपयोग किए गए Select/SelectMany की आवश्यकता को पूरी तरह से प्रतिस्थापित करें। दोनों संग्रह और संदर्भ प्रकार नेविगेशन गुणों के लिए अलग अधिभार हैं। यदि आप संग्रह के साथ ओवरलोड का उपयोग करते हैं, तो ThenInclude संग्रह तत्व के प्रकार पर चलता है, इसलिए अंत में आप हमेशा एक इकाई प्रकार के साथ समाप्त होते हैं।

आपके मामले में, pa आपके जंक्शन तालिका तत्व प्रकार को हल करना चाहिए, इसलिए Author सीधे पहुंच योग्य होना चाहिए।

.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests)) 

एफई कोर करने के लिए अनुवाद:

.Include(p => p.PostAuthor).ThenInclude(pa => pa.Author).ThenInclude(a => a.Interests) 
+4

वाह, धन्यवाद

उदाहरण के लिए EF6 श्रृंखला में शामिल हैं। बहुत अजीब - विजुअल स्टूडियो मुझे pa.Author (इसके बजाय कुछ लिंक विधियों का सुझाव देता है) के लिए इंटेलिजेंस नहीं देगा और जैसे ही मैं इसे लिखने की कोशिश करता हूं, सबकुछ लाल रंग के साथ रेखांकित करेगा। आपकी पोस्ट के बाद मैंने वीएस की उपेक्षा की और सब कुछ एक आकर्षण की तरह काम करने के बाद। – nikovn

+1

यह अजीब बात है। मैं वीएस2015 अपडेट 3 का उपयोग कर रहा हूं, और जब मैं कुछ लिखता हूं जैसे 'db.Parents.Include (p => p.Children)। फिर शामिल करें (c => c.Child)। फिर शामिल करें (c => c.Parents) 'I प्रत्येक लैम्ब्डा में सही इंटेलिसेंस समर्थन प्राप्त करें। –

+0

वीएस2015 अंतिम अपडेट 3 यहां भी। आश्चर्यचकित नहीं है, मेरे पास कोर प्रोजेक्ट्स पर अन्य बग हैं - उदाहरण के लिए जब मैं इंटेलिसेंस द्वारा सुझाए गए आइटम का चयन करता हूं तो यह फ़ाइल के बीच में प्रतीकों को लिखता है, आदि शायद यह प्लगइन्स है ... – nikovn

संबंधित मुद्दे