6

मैं एमएफसी प्रोजेक्ट में ईएफ 4.1 और कोड-फर्स्ट का उपयोग कर रहा हूं, और मॉडल देखने के लिए इकाइयों को मैप करने के लिए ऑटोमैपर।मैं आलसी-भारित गुणों के साथ इकाइयों को कैसे मैप कर सकता हूं (उन्हें लोड करने के बिना)?

कोड-पहले उपयोग करने से पहले मैं कुछ भी लोड होने से रोकने के लिए नेविगेशन गुणों को बाहर करने में सक्षम था जो पहले से नहीं था। मैं अतिरिक्त डेटाबेस राउंड-ट्रिप से बचने के लिए आवश्यक संदर्भों को शामिल करने के लिए अपने प्रश्नों में शामिल हूं।) शामिल करें।

हालांकि, कोड-प्रथम के साथ मेरी इकाई केवल एक इकाई संपत्ति का खुलासा करती है (या यदि एक से अधिक हो तो आईसीओलेक्शन)। मुझे कैसे पता चलेगा कि लोड लोड किए बिना इसे लोड किया गया है या नहीं?

मान लें कि यह किया जा सकता है, क्या यह ऑटोमैपर के लिए डिफ़ॉल्ट व्यवहार करने का कोई तरीका है, ताकि मुझे स्पष्ट रूप से प्रत्येक इकाई पर सदस्यों को बहिष्कृत करने की आवश्यकता न हो?

उत्तर

10

आप देख सकते हैं ईएफ कोड सबसे पहले आभासी के रूप में चिह्नित गुणों के लिए आलसी लोडिंग करता है (यह उन लोगों को ओवरराइड कर सकता है और इसके बजाय डायनामिकप्रॉक्सी रख सकता है)। यदि आप अपनी संपत्ति वर्चुअल नहीं बनाते हैं, तो आप उस संपत्ति के लिए आलसी लोडिंग बंद कर देंगे।

+1

धन्यवाद, यही वही है जो मुझे चाहिए। बहुत बुरा है कि मुझे संदर्भ के आसपास की आवश्यकता है, इसके बदले में मेरे रिपॉजिटरी पर कुछ सहायक शामिल करना पड़ सकता है। –

2

आप आलसी लोडिंग को बंद करके उन्हें explicitly load में सक्षम होना चाहिए:

bool isLoaded1 = dbContext.Entry(entity).Reference(e => e.MyReferenceProperty) 
        .IsLoaded(); 
bool isLoaded2 = dbContext.Entry(entity).Collection(e => e.MyCollectionProperty) 
        .IsLoaded(); 
+1

मुझे लगता है कि ईएफ 4.1 और कोड-फर्स्ट के साथ उसके पास पीओसीओ है, इसलिए नेविगेशन गुणों पर 'इस्लोडेड' और 'लोड' उपलब्ध नहीं होगा। – Slauma

+0

धन्यवाद, आलसी लोडिंग को अक्षम करना एक विकल्प भी हो सकता है - देखेंगे कि सबसे अच्छा क्या काम करता है। –

4

: क्या एक entity के संदर्भ या संग्रह नेविगेशन संपत्ति से लोड किया गया है

using(var context = new FooBarEntities()) 
{ 
    context.ContextOptions.LazyLoadingEnabled = false; 
    Foo foo = context.Foo.Where(x => x.Id == myId).Single(); 
    ... 
    if(!foo.Bars.IsLoaded) 
    { 
     foo.Bars.Load(); 
    } 
    //do something with foo.Bars here 
} 
संबंधित मुद्दे

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