c# - don't flush the Session after an exception occurs -


  NHibernate सत्र प्रबंधक। इन्स्टेंस। GETSessionFrom (सत्रफ़ीक्चरसंकेतपाथ) .Flush ();   

मैं <पूर्व> फूड ऑर्डर में नल आईडी। कोर। एंटीटीज। लेख प्रविष्टियां (एक अपवाद होने के बाद सत्र को फ्लश नहीं करें)

क्या मैं बस पकड़ और सत्र का उपयोग करने के लिए उपयोग कर सकता हूँ। बंद करें या इस उदाहरण में क्या करना बेहतर है?

उदाहरण

  सार्वजनिक शून्य CommitChanges () {यदि (NHibernate सत्र प्रबंधक। इंस्ट्रॉंस। HesOpenTransactionOn (SessionFactoryConfigPath)) {NHibernateSessionManager.Instance.CommitTransactionOn (SessionFactoryConfigPath); } Else {try {// अगर कोई लेन-देन नहीं है, तो बस NHibernateSessionManager.Instance.GetSessionFrom (SessionFactoryConfigPath) परिवर्तनों को फ्लश करें। फ्लश (); } अंत में {NHibernateSessionManager.Instance.GetSessionFrom (सत्रफ़ीक्चरकॉन्फिगपाथ)। क्लोज़ (); }}}}    

एक अपवाद के बाद, आपका सत्र एक अमान्य स्थिति में है और निपटारा हो यह एक कारण है कि आपको लेनदेन में हमेशा लिखना क्यों चाहिए यदि नहीं, तो आपको अपने डाटाबेस की स्थिति के बारे में कोई जानकारी नहीं है। इसलिए मैं यह सुझाऊंगा:

  1. आप स्पष्ट रूप से फ्लश नहीं करते हैं और हमेशा जोर देते हैं कि डेटा एक्सेस (पढ़ता और लिखता है) लेनदेन के अंदर किया जाता है।
  2. विकल्प, मैं आपको अपवाद के मूल कारण को खोजने के लिए प्रोत्साहित करूंगा - लगता है जैसे आपके पास एक असाइन किए गए आईडी के साथ एक इकाई मैप है जिसे कभी सेट नहीं किया गया था - और उसे ठीक करें।
  3. यदि यह कोई विकल्प नहीं है, तो निपटाना सत्र की जब कोई अपवाद होता है।

    उम्मीद है कि मदद करता है।

Comments