2009-04-20 13 views
15

क्या यह nHibernate में एक पठनीय कनेक्शन बनाना संभव है?nHiberate में एक पठनीय सत्र कैसे बनाएं?

केवल पढ़ने के लिए: जहां nHibernate अंतर्निहित डेटाबेस में किसी भी बदलाव को स्पष्ट रूप से या स्पष्ट रूप से फ़्लश नहीं करेगा।

निबर्ननेट कनेक्शन बंद करते समय यह लगातार ऑब्जेक्ट में परिवर्तनों को फ़्लश करता है।

फ्लश मोड को पर सेट करना कभी भी एक तरीका नहीं है - लेकिन उलट है (यानी कुछ कोड फ्लश मोड को रीसेट कर सकते हैं)।

+0

मुझे पता है कि यह एक प्राचीन (इंटरनेट समय) प्रश्न है, लेकिन इस बारे में आपकी चिंता का कारण क्या है "उलटा"? –

उत्तर

13

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

मुझे लगता है कि उचित समाधान है session.FlushMode = FlushMode.Never साथ सुझाव है रीड-ओनली और डेटाबेस केवल चयन अनुमतियों (या जो भी अपनी स्थिति के लिए उपयुक्त है) कि एक कनेक्शन का उपयोग करके इसे लागू करने के लिए। अलग ISessionFactory कारखानों को बनाए रखने से ReadOnlySessionFactory.Create() जैसे कुछ की अनुमति देकर मदद मिल सकती है।

0

अपडेट जमा NHibernate 3.1 में उपलब्ध हो गया, रीड ओनली संस्थाओं पर एक नजर डालें, और बस कभी नहीं निस्तब्धता मेरे लिए एक बुरा समाधान की तरह लगता है। मैंने एक समान प्रश्न पोस्ट किया। प्रदान किया गया समाधान एक अलग दृष्टिकोण का उपयोग करता है। सभी घटनाएं खाली करने के लिए सेट हैं, और इस प्रकार अनदेखा किया गया है। मेरी भावना यह है कि यह एक बेहतर दृष्टिकोण है।

मुझे आश्चर्य है कि ऐसा करना आसान नहीं है। मुझे एक विस्तार विधि का उपयोग करने के लिए इकाई ढांचा दृष्टिकोण पसंद है .ऐंनट्रैकिंग() जो सुनिश्चित करता है कि केवल प्रश्नों को पढ़ना ही इस तरह से रहता है।

How to create an NHibernate read-only session with Fluent NHibernate that doesn't accumulate updates?

+0

नहीं, अद्यतन सत्र के बाद अद्यतन जमा नहीं होते हैं। फ्लशमोड = फ्लशमोड। कभी नहीं। मैंने इसे अपने प्रश्न में SaveOrUpdateEventListeners को ओवरराइड करके चेक किया है, और श्रोता को FlushMode के साथ नहीं कहा जाता है। कभी भी नहीं। आपके समाधान में NoOpEventListener को प्रत्येक परिवर्तन के लिए बुलाया जाता है – razon

1

NHibernate में एक नए केवल पढ़ने के लिए सुविधा (मैं कौन-सा संस्करण पता नहीं है, लेकिन यह सुनिश्चित करने के लिए 3.3.0 में है) नहीं है। आप केवल इस का उपयोग कर पढ़ने के लिए सत्र सेट कर सकते हैं:

session.DefaultReadOnly = true 

यह पुराने मूल्यों के लिए कैश अक्षम कर देता है और इसलिए प्रदर्शन और स्मृति की खपत में सुधार।

NHibernate reference documentation में chapter about read-only entities है।

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