2009-06-17 13 views
5

के बाद लेनदेन परिवर्तन मेरे पास निम्न कोड है (चर्चा के लिए सरलीकृत)। मुझे समझ में नहीं आता है कि क्यों session.Transaction संपत्ति रोलबैक के बाद एक अलग लेनदेन देता है।सत्र। रोलबैक (एनएचबीरनेट)

उदाहरण के लिए, इसका मतलब है कि संपत्ति Session.Transaction.WasRolledBack छोटी सहायता नहीं है जब तक कि मैं पहले लेनदेन का संदर्भ संग्रहीत नहीं करता और लेनदेन की संपत्ति की जांच करता हूं।

क्या कोई यहां कुछ अंतर्दृष्टि प्रदान कर सकता है?

int transId = session.Transaction.GetHashCode(); 

using (var tx = session.BeginTransaction()) 
{ 
    Assert.AreEqual(transId, tx.GetHashCode()); 

    tx.Rollback(); 

    Assert.AreEqual(transId, tx.GetHashCode()); 
    Assert.AreEqual(transId, session.Transaction.GetHashCode()); // Fails 
} 

अद्यतन:

डेविड Walschots 'जवाब बहुत उपयोगी और सटीक है। इसके अलावा, मैं Nhibernate Documentation में निम्नलिखित मिला:

आप लेन-देन तो आप तुरंत बंद हो जाना चाहिए रोलबैक और कार्रवाई में NHibernate से वर्तमान सत्र त्यागने सुनिश्चित करना है कि NHibernate की आंतरिक स्थिति को संगत है "

उत्तर

6

हैं। (कुएटे, हैरिस, बाउर, किंग):

"लेनदेन करने के बाद, एनएचबीर्नेट सत्र इसे नए लेनदेन के साथ बदल देता है। इसका मतलब है कि आपको उस लेनदेन का संदर्भ रखना चाहिए जो आप कर रहे हैं यदि आपको लगता है कि आपको बाद में इसकी आवश्यकता होगी। यदि आपको लेनदेन कॉल करने की आवश्यकता है तो यह आवश्यक है। session.Transaction.WasCommitted हमेशा झूठी वापसी करता है। "

सबसे अधिक संभावना लेनदेन पर लागू होती है। WasRolledBack प्रॉपर्टी

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