2010-12-10 12 views
9

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

मेरी समस्या यह है कि पेजिंग के साथ है। मैं प्रति पृष्ठ 15 आइटम चाहते हैं। यह पूरी तरह से काम करता है अगर प्रत्येक माता-पिता के पास केवल एक बच्चा होता है। समस्या तब होती है जब माता-पिता के पास 1 से अधिक बच्चे होते हैं। उदाहरण के लिए, यदि माता-पिता के पास 2 बच्चे के रिकॉर्ड हैं, तो डेटाबेस वास्तव में दो अभिलेखों का प्रतिनिधित्व करता है, जिसमें दो बच्चों में से प्रत्येक के लिए एक ही माता-पिता का प्रतिनिधित्व होता है। इसलिए, पृष्ठ पर मेरे डेटा दृश्य में, ऐसा प्रतीत होता है कि केवल 14 रिकॉर्ड हैं।

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

क्या एनएचबर्ननेट में कुछ ऐसा बनाया गया है जो मुझे याद कर सकता है कि मुझे याद आ रही है?

किसी भी विचार के लिए धन्यवाद।

उत्तर

0

आपको अपनी क्वेरी पर एक अलग रूट इकाई परिणाम ट्रांसफार्मर का उपयोग करने की आवश्यकता है। आपने यह नहीं कहा है कि आप एचक्यूएल या मानदंड का उपयोग कर रहे हैं, लेकिन एपीआई दोनों के लिए समान है।

// criteria 
criteria.SetResultTransformer(Transformers.DistinctRootEntity) 

यह परिणाम सेट को केवल विशिष्ट अभिभावक इकाइयों में ही मजबूर करेगा।

+2

मैं विशिष्ट रूट इकाई का उपयोग कर रहा हूं, लेकिन यह अभी भी अलग-अलग मूल वस्तुओं को गिनने के लिए, हर बार मल्टीप्लिप आइटम आइटम की गणना कर रहा है। – czuroski

+0

@ जेम्स ग्रेगरी - आपका सुझाव काम नहीं करेगा क्योंकि पेजिंग को आमतौर पर SELECT TOP (@ p0) के रूप में व्यक्त किया जाता है .... और यदि उत्सुक लोडिंग हो तो आप इसमें शामिल हो जाते हैं जिससे कुछ संस्थाएं शीर्ष द्वारा लगाई गई बहुत कम सीमा दिखाई देगी। –

1

आप fetch="subselect" के साथ अपने संबंध संपत्ति को चिह्नित कर सकते हैं - यह भी सुनिश्चित करें कि आप प्रत्येक चयन के लिए दो प्रश्नों बनाने की लागत में एक विशाल कार्तीय उत्पाद के साथ समस्याओं में चलाने नहीं है बनाता है।

0

बाल संग्रह के लिए आपके मानचित्रण में batch-size संकेत का उपयोग करना शायद इससे निपटने का सबसे अच्छा/आसान तरीका है। आगे की चर्चा के लिए, इस उत्तर को similar question पर देखें।

+0

दूसरे शब्दों में, उत्सुक लोडिंग का उपयोग करने के बजाय, यह उत्तर N + 1 प्रदर्शन समस्या से बचने के लिए आलसी लोड पर सक्षम बैचिंग के साथ आलसी लोडिंग पर स्विच करने का सुझाव देता है। –

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