2010-07-18 17 views
25

क्या कुछ गुणों को छोड़कर इकाई को लोड करना संभव है? इस इकाई के गुणों में से एक चुनने के लिए महंगा है। मैं इस संपत्ति को आलसी लोड करना चाहता हूं। क्या यह संभव है?इकाई फ्रेमवर्क 4 चुनिंदा आलसी लोडिंग गुण

उत्तर

33

अब जब आपने हर किसी के जवाब को पढ़ लिया है, तो मैं आपको सही उत्तर दूंगा। ईएफ गुणों की आलसी लोडिंग का समर्थन नहीं करता है। हालांकि यह तब एक बहुत शक्तिशाली अवधारणा का समर्थन करता है। इसे टेबल विभाजन कहा जाता है जहां आप एक टेबल को दो इकाइयों में मैप कर सकते हैं। कहें डेटाबेस में एक उत्पाद तालिका उत्पाद इकाई और ProductDetail इकाई के लिए मैप किया जा सकता है। फिर आप महंगे फ़ील्ड को ProductDetail इकाई में ले जा सकते हैं और फिर प्रोडक्ट और उत्पाद प्रविष्टि इकाई के बीच 1..1 सहयोग बना सकते हैं। जब आप इसकी आवश्यकता हो तो आप उत्पाद विवरण केवल आलसी लोड कर सकते हैं। मेरी पुस्तक के मेरे प्रदर्शन अध्याय में, मेरे पास एक नुस्खा है। 13-9। एक महंगी संपत्ति को एक और इकाई में स्थानांतरित करना

आशा है कि मदद करता है!

Julie Lerman has an article on how to split a table

+3

धन्यवाद। मुझे यह करना होगा। लेकिन ईएफ 4 को स्केलर गुणों पर आलसी लोडिंग का समर्थन करना चाहिए, यह वास्तव में आसान हो सकता है। –

+0

मुझे पता है कि टीम अगले संस्करण में आलसी लोडिंग गुणों के बॉक्स का समर्थन करने पर काम कर रही है, लेकिन मुझे लगता है कि महंगी कॉलम को दूसरी इकाई में ले जाना एक बार में कई महंगी संपत्तियों को लोड करने में देरी के लिए मार्ग खोलता है। कल्पना करें कि आपके पास कर्मचारी चित्र और नियोक्ता के साथ एक कर्मचारी वस्तु है जो दोनों महंगी हैं और आप दोनों को लोड करने में देरी करना चाहते हैं लेकिन जब भी आप उन्हें लोड करना चाहते हैं, तो आप उन्हें एक साथ लोड करना चाहते हैं। यह ऐसा कुछ है जिसे आप linq में sql में नहीं कर सकते हैं। – zeeshanhirani

+0

हां, यदि एक से अधिक महंगे क्षेत्र हैं, तो इस मामले में ईएफ टीम लोडएललाज़ीप्रॉपर्टीज जैसे ध्वज को सक्षम कर सकती है जो ईएफ को आलसी लोड के रूप में चिह्नित सभी स्केलर गुणों को लोड करने की अनुमति देती है, जब भी उनमें से कोई भी अनुरोध किया जाता है। इससे एंटिटी टाइप्स को अलग किए बिना आपके द्वारा उल्लेखित स्थितियों में सुधार होता है !! –

1

उत्तेजना सही है, लेकिन आलसी लोडिंग का उपयोग करते समय सावधान रहें। आपके पास प्रदर्शन समस्याएं हो सकती हैं और यह नहीं पता कि संपत्ति आपके कोड में किसी विशिष्ट स्थान पर लोड हो रही है। ऐसा इसलिए होता है क्योंकि जब आप संपत्ति का उपयोग करते हैं तो यह डेटा लोड करता है

मैं स्पष्ट लोडिंग का उपयोग करना पसंद करता हूं। इस तरह आप जानते हैं कि वे कब लोड होते हैं और कहां जाते हैं। यहां एक लिंक दिया गया है जो लोडप्रॉपर्टी http://sankarsan.wordpress.com/2010/05/09/ado-net-entity-framework-data-loading-part-2/

के लिए एक उदाहरण देता है आप भी शामिल विधि का उपयोग कर लोडिंग कर सकते हैं। यहाँ उदाहरण: http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework

+0

stimms और दान, मैं एक संबंधित संपत्ति मतलब नहीं है, मैं जीवनी (C# या एसक्यूएल सर्वर में varchar (1024) में स्ट्रिंग) जो वास्तव में है की तरह एक क्षेत्र (वर्ग के सदस्य) की चर्चा करते हुए कर रहा हूँ इकाई के साथ लोड करने के लिए महंगा, मैं जरूरी होने पर इसे आलसी लोड करना चाहता हूं। जहां तक ​​मुझे पता है, यह ईएफ 4 में काम नहीं करता है। क्या इसे करने का कोई तरीका है? –

+1

तो क्या आप एक स्केलर संपत्ति को आलसी लोड करना चाहते हैं? मेरे सिर के ऊपर से मैं एंटिटी पर जीवनी को विभाजित करने और इसे नेविगेशन प्रॉपर्टी के रूप में सेट करने का प्रयास कर सकता हूं। तो मैं आलसी/उत्सुक/इसे लोड करने में सक्षम हो जाऊंगा। एक बेहतर तरीका हो सकता है ... जब मुझे मौका मिलता है तो मैं इस सिद्धांत का परीक्षण करूंगा। –

+0

धन्यवाद, यह एकमात्र कुशल तरीका प्रतीत होता है। –

6
एक अदिश संपत्ति के साथ

, एक ही रास्ता चुनिंदा एक निश्चित संपत्ति लोड नहीं करने के लिए ESQL या L2E में परियोजना के लिए है:

var q = from p in Context.People 
     select new 
     { 
      Id = p.Id, 
      Name = p.Name // note no Biography 
     }; 

दान करने के लिए +1; यह आलसी करना इसे ऊपर से लोड करने से भी बदतर है। अगर आप लोडिंग को नियंत्रित करना चाहते हैं, तो स्पष्ट रहें।

+0

इस सुझाव के लिए धन्यवाद। हाँ, लेकिन यह प्रक्षेपण कुशल नहीं है। सबसे पहले, इसका परिणाम एक अनाम प्रकार होगा जिसका उपयोग सीधे लोगों के रूप में नहीं किया जा सकता है। एक नई पीपुल्स ऑब्जेक्ट को बनाया जाना चाहिए और ठीक से तुरंत चालू किया जाना चाहिए, जो ऑब्जेक्ट्स के बीच पार्सिंग का समय बर्बाद हो जाएगा। इस प्रकार संदर्भ के द्वारा या तो ट्रैक करने योग्य नहीं होगा। –

+2

@ नाज़ाफ, आप समय से पहले अनुकूलन कर रहे हैं। –

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