2010-12-02 15 views
6

LINQ से SQL के साथ, आप निर्दिष्ट दिए गए फ़ंक्शन के लिए निर्दिष्ट कर सकते हैं, कि आप विशिष्ट बाल तत्वों को लोड नहीं करना चाहते हैं (उत्सुकतापूर्वक या आलसी)। क्या यह NHibernate में संभव है? ऐसे समय होते हैं जब मैं केवल रूट ऑब्जेक्ट और/या ऑब्जेक्ट ग्राफ़ का केवल एक हिस्सा चाहता हूं, और मैं यह निर्दिष्ट करने में सक्षम होना चाहता हूं कि डीटीओ लिखने के बजाय और मैपिंग करने के बजाय सिर्फ इस तथ्य को प्राप्त करने के लिए कि NHibernate महसूस करता है अगर मैं अपनी वस्तु को क्रमबद्ध करने का प्रयास करता हूं तो सब कुछ लोड करने के लिए मजबूर किया जाता है।क्या मैं चुनिंदा रूप से आलसी लोडिंग डब्ल्यू/एनएचबीरनेट को बंद कर सकता हूं?

धन्यवाद!

उत्तर

5

हाँ, पर ...

लचीलेपन का स्तर आप यहाँ NHibernate के अपने संस्करण और कैसे आप अपने प्रश्न का निर्माण कर रहे पर निर्भर हो सकता। उदाहरण के लिए, एक LINQ क्वेरी (यहां वह जगह है जहां वर्जनिंग कोई फर्क पड़ सकता है) आपको ICriteria या HQL क्वेरी के समान लचीलापन नहीं दे रहा है।

मानदंड एपीआई के साथ, आप .SetFetchMode() पर कॉल कर सकते हैं, संपत्ति में गुज़रने और उस क्वेरी के वांछित मोड को कॉल कर सकते हैं।

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

+0

यही वह है जिसे मैं ढूंढ रहा हूं - धन्यवाद। मैं संग्रह में इसे कड़ी-कोडिंग करने के बजाय प्रति अनुरोध करना चाहता हूं। – sydneyos

2

सब कुछ जे पहले ही कहा है कि, के साथ साथ आप अपने मानचित्रण फ़ाइलों में आलस्य निर्दिष्ट कर सकते हैं ... आप इसे श्रेणी स्तर पर निर्दिष्ट कर सकते हैं:

<class name="Foo" lazy="true"> 
    <!-- additional data --> 

या संपत्ति/संग्रह स्तर पर:

<property Name="Bar" lazy="true"/> 
<set Name="Bars" lazy="true"> <-- makes the collection lazy 
<set Name="Bars" fetch="join"> <-- eagerly fetches child items in the collection 
<set Name="Bars" fetch="select"> <-- fetches items via another select when the collection is accessed for the first time 

ये डिफ़ॉल्ट विशिष्ट क्वेरी के लिए ओवरराइड किए जा सकते हैं और HQL द्वारा अनदेखा किया जाता है।

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