2008-12-02 10 views
5

का उपयोग करके आलसी = "अतिरिक्त" जैसी कार्यक्षमता को कार्यान्वित करने का सबसे अच्छा तरीका मेरे पास एक से अधिक संबंध हैं जहां बाल तालिका में सैकड़ों हजार रिकॉर्ड हो सकते हैं। इस मामले में, माता-पिता को बुलाओ। चाइल्डकोलेक्शन। काउंटर बाल संग्रह की आलसी शुरुआत को मजबूर करता है जो बेहद महंगा है।NHibernate 2.0.1

हाइबरनेट 3.0 में एक सुविधा आलसी = "अतिरिक्त" है जो आपको पूरी चीज़ को आलसी लोड किए बिना संग्रह गुणों का सबसेट देखने की अनुमति देती है।

दुर्भाग्यवश यह एनएचबीरनेट 2.1 तक उपलब्ध नहीं होगा, जो अभी भी अल्फा में है। http://jira.nhibernate.org/browse/NH-855

मैं इसे NHibernate 2.0.1 के साथ कैसे पूरा कर सकता हूं?

मैं इस

<property name="ChildCollectionCount" type="int" formula="(select count(*) from ChildTable child where child.parentID = parentID "/> 

के रूप में विशेष गुण होते हैं के लिए इस्तेमाल किया, लेकिन मैं इन अब और उपयोग नहीं कर सकते क्योंकि मैं अब इस पुस्तकालय और अन्य उपयोगकर्ताओं के लिए अपने एक प्रदर्शन समस्या साझा कर रहा हूँ।

+1

NHibernate 3 में अपग्रेड करें और इस प्रश्न को बंद करें? –

उत्तर

0

जब आप इसे अन्य उपयोगकर्ताओं के लिए प्रदर्शन समस्या कहते हैं, तो क्या आपका मतलब है कि वे संग्रह तक पहुंच भी लेना चाहते हैं, लेकिन यह उनके लिए बहुत बड़ा है। या कोड स्निपेट/चाइल्डकोलेक्शन काउंटर उनके लिए बहुत धीमा है?

यदि यह पहला मामला है, तो शायद आपको उनके लिए एक समान समाधान करने की आवश्यकता है - पहचानें कि उन्हें क्या चाहिए और उस सुविधा को प्रदान करने वाली विधियों को प्रदान करें।

0

बहुत देर से, लेकिन आप संग्रह

IQuery q = nhSession.CreateFilter(Parent.ChildCollection, "select count(*)"); 
long countResult = q.UniqueResult<long>(); 

इस संग्रह की एक प्रारंभ मजबूर नहीं होगा, लेकिन इसके बजाय डाटाबेस के लिए एक एकल क्वेरी निष्पादित

0

मैं एक अलग सिफारिश करेंगे पर एक फिल्टर लागू कर सकते हैं डोमेन संबंध के बजाय क्वेरी। फिर आप सभी प्रकार के अनुकूलन का उपयोग कर सकते हैं।