2010-07-12 18 views
6

इन 3 प्रकार के लोडिंग के बीच अंतर क्या हैं? क्या कोई उदाहरण के साथ समझा सकता है? विभिन्न संसाधन ऑनलाइन विभिन्न परिभाषाओं का उपयोग करते हैं जो आवश्यक से अधिक भ्रम पैदा करते हैं।आलसी लोडिंग, डिफर्ड लोडिंग और उत्सुक लोडिंग एंटिटी फ्रेमवर्क

उत्तर

7

आलसी लोडिंग और डिफरर्ड सुंदर समानार्थी हैं (AFAIK, अगर मैं गलत हूं तो कृपया मुझे सही करें)। बड़ा अंतर उत्सुक और आलसी के बीच है। उत्सुक सामने होगा, Lazy केवल तब होता है "की जरूरत के रूप में" और निष्पादन डीबी पर क्या होगा स्तर के के एक सरल डालते हैं एक उदाहरण

var people = (from p in people SELECT p).ToList(); 
var jobs = (from j in jobs SELECT j).ToList(); 

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList() 

यह उत्सुक लोड हो रहा है का एक उदाहरण है के रूप में बयान में शामिल हों। हम सभी लोगों, सभी नौकरियां प्राप्त कर रहे हैं, और हम स्मृति में शामिल हो रहे हैं। बहुत स्मार्ट नहीं (आमतौर पर)। यह आलसी शैली की तरह दिखता है।

var people = (from p in people SELECT p); 
var jobs = (from j in jobs SELECT j); 

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList() 

क्या यह क्या कर रहा है (IQueryable आलसी है) दोनों लोगों और इस काम के लिए एक IQueryable पैदा कर रही है, और शामिल होने के डीबी में हो रहा है। यह नेटवर्क गतिविधि को बचाता है, और आमतौर पर वास्तव में तेज़ होता है, क्योंकि डीबी को जुड़ने के लिए अनुकूलित किया जाता है।

जब तक हम स्पष्ट रूप से कहते हैं कि "मुझे वह डेटा चाहिए!" (इसे जोड़ने के लिए, इसके माध्यम से पुनरावृत्ति, आदि) यह आलसी है। कुछ और quirks हैं लेकिन यह एक सभ्य प्राइमर होना चाहिए।

+0

नोट- सिंटैक्स 100% नहीं हो सकता है, बस कफ से बाहर जा रहा है। –

+0

आपके उदाहरण के अनुसार, एक बार एक ToList करते हैं, यह उत्सुक लोडिंग है क्योंकि यह डेटा प्राप्त करने के लिए डीबी हिट करता है। तो, यह एक प्रोग्रामिंग शैली के अधिक प्रतीत होता है। हालांकि, ईएफ के साथ, संदर्भ विकल्प में LazyLoading को सत्य या गलत के रूप में सेट करने का एक तरीका है। यह कैसे फिट है? – DotnetDude

+0

आजी 4 LazyLoading बंद के साथ आपको लोगों को कहने की आवश्यकता होगी। नौकरियों के रिकॉर्ड वापस लाने के लिए शामिल करें ("नौकरियां") (नौकरियां मानना ​​लोगों को FK'd है)। LazyLoading के साथ, जब आवश्यक हो तो वह डेटा वापस कर दिया जाएगा। अर्थात। जब आप लोग कहते हैं। जॉब्स। टॉलिस्ट(); –

3

आलसी/डिफरर्ड लोडिंग: आलसी लोडिंग और डिफरर्ड लोडिंग एक ही चीज़ है। रिश्ते को तब लोड किया जाता है जब इसे पहली बार एक्सेस किया जाता है। विचार यह है कि यदि डेटा की आवश्यकता नहीं है तो इसे लोड नहीं किया जाना चाहिए।

उत्सुक लोडिंग: अभिभावक वस्तु के साथ संबंध प्राप्त किया जाता है। यह डेटा लोड करने में अधिक सक्षम हो सकता है लेकिन डेटा का उपयोग किए जाने वाले डेटा के बावजूद डेटा लोड करेगा।

0

जब किसी क्वेरी द्वारा ऑब्जेक्ट लौटाए जाते हैं, तो संबंधित ऑब्जेक्ट्स एक ही समय में लोड नहीं होते हैं।

इसके बजाय नेविगेशन संपत्ति का उपयोग होने पर वे स्वचालित रूप से लोड हो जाते हैं। "आलसी लोडिंग" के रूप में भी जाना जाता है,

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