2008-08-28 3 views
5

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

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

उत्तर

6
+0

कुछ महीने बाद बस एक नोट। हालांकि हम अभी भी ऊपर के दृष्टिकोण का उपयोग कर रहे हैं, अधिकांश भाग के लिए, आईओसी उपकरण का उपयोग करने के लिए काम करने वाले लोगों द्वारा 'ISessions' और 'ISessionFactory' का प्रबंधन करने के लिए काम करने वाले लोगों द्वारा अधिक दिलचस्प काम किया जा सकता है - शायद संरचना मैप और FubuMvc को देखना चाहें अधिक जानकारी के लिए परियोजनाओं। –

+1

@ मैट: कैसल एनएचबर्ननेट सुविधा पर नज़र डालें, यह वर्षों से आसपास रहा है: http://www.castleproject.org/container/facilities/trunk/nhibernate/index.html –

+0

उत्तर में दिए गए लिंक पुराने होने लगते हैं । –

1

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

यदि आपका सत्र जीवनकाल बहुत बड़ा है, तो आप अन्य मुद्दों में भाग सकते हैं।

यदि यह एक वेब ऐप है, तो आप सत्र-प्रति-httpRequest पैटर्न के साथ शायद ठीक करेंगे। असल में यह एक HttpModule है जो अनुरोध की शुरुआत में सत्र खोलता है और अंत में flushes/बंद हो जाता है। सत्र को HttpContext में संग्रहीत करना सुनिश्चित करें। यह एक स्थिर VARIABLE नहीं है। < --- उन सभी प्रकार की समस्याओं का कारण बनता है जिनसे आप निपटना नहीं चाहते हैं।

आप कार्य कार्यान्वयन की एक इकाई के लिए RhinoCommons पर भी देख सकते हैं। बाहर एक महान ट्यूटोरियल के लिए SummerOfNHibernate वेबकास्ट

+0

मैंने वेब ऐप्स के सत्र सत्र के इस तरीके के कई उदाहरण देखे हैं, लेकिन इसे Winforms के साथ काम करने के लिए एक और कहानी है। बिली मैककैफ्र्टी अपनी पूरी कोशिश करता है, लेकिन Winforms में अपने ढांचे का उपयोग करने के लिए कोई सलाह नहीं देता है। विशेष रूप से, Winforms में एक लेनदेन शुरू करने और फ्लश करने के लिए कब। –

2

जांच ... आप विशेष रूप से के लिए क्या देख रहे हैं नहीं आती webisode 5 या 6

0

आप एक वेब एप्लिकेशन विकसित कर रहे हैं के बाद से (संभवतः एएसपी.नेट के साथ), कोडप्रोजेक्ट पर NHibernate Best Practices with ASP.NET देखें।