समय-समय पर ISession
स्मृति में रखी गई वस्तुओं की स्थिति के साथ ADO.NET कनेक्शन की स्थिति को सिंक्रनाइज़ करने के लिए आवश्यक SQL कथनों को निष्पादित करेगा। यह प्रक्रिया, फ्लश, निम्न बिंदुओं पर डिफ़ॉल्ट रूप से होती है
Find()
या के कुछ आह्वान सेEnumerable()
- से
NHibernate.ITransaction.Commit()
- से
ISession.Flush()
SQL कथन निम्न क्रम में जारी किए जाते हैं
- सभी इकाई सम्मिलन, उसी क्रम में संबंधित वस्तुओं का उपयोग करके बचाया गया था
ISession.Save()
- सभी इकाई अद्यतन
- सभी संग्रह हटाए गए
- सभी संग्रह तत्व विलोपन, अद्यतन और सम्मिलन
- सभी संग्रह सम्मिलन
- सभी इकाई विलोपन, उसी क्रम में संबंधित वस्तुओं का उपयोग करके हटा दिया गया था
ISession.Delete()
(अपवाद यह है कि मूल आईडी पीढ़ी का उपयोग करने वाली वस्तुओं को सहेजे जाने पर डाला जाता है।)
जब आप अन्वेषण करते हैं Flush()
, तो सिवाय इसके बारे में कोई गारंटी नहीं है कि सत्र ADO.NET कॉल को निष्पादित करता है, केवल उसी क्रम में जिसमें वे निष्पादित किए जाते हैं । हालाँकि, NHibernate इस बात की गारंटी देता है कि ISession.Find(..)
विधियाँ कभी भी बासी डेटा को वापस नहीं करेंगी; न ही वे गलत डेटा वापस करेंगे।
डिफ़ॉल्ट व्यवहार को बदलना संभव है ताकि फ्लश कम बार हो। FlushMode
समय के लिए प्रतिबद्ध में केवल फ्लश (और केवल जब NHibernate: वर्ग तीन अलग प्रकार परिभाषित करता है ITransaction
, एपीआई प्रयोग किया जाता है) फ्लश स्वचालित रूप से नियमित, या कभी नहीं फ्लश जब तक समझाया का उपयोग कर Flush()
स्पष्ट रूप से कहा जाता है। अंतिम मोड काम की लंबी चलने वाली इकाइयों के लिए उपयोगी है, जहां एक ISession
को लंबे समय तक खुला और डिस्कनेक्ट किया जाता है।
...
एक सत्र के अंत में चार अलग-अलग चरण शामिल होते हैं:
- सत्र फ्लश करें
- लेन-देन करें
- सत्र बंद करें
- अपवादों को संभालें
सत्र फ्लशिंग
यदि आप ITransaction
एपीआई का उपयोग करते हैं, तो आपको इस कदम के बारे में चिंता करने की आवश्यकता नहीं है। लेन-देन के लिए प्रतिबद्ध होने पर इसका प्रदर्शन किया जाएगा। अन्यथा आपको ISession.Flush()
यह सुनिश्चित करने के लिए कॉल करना चाहिए कि सभी परिवर्तन डेटाबेस के साथ सिंक्रनाइज़ किए गए हैं।
डेटाबेस ट्रांजेक्शन करना
यदि आप NHibernate ITransaction API का उपयोग कर रहे हैं, तो ऐसा दिखता है:
tx.Commit(); // flush the session and commit the transaction
यदि आप ADO.NET लेनदेन का प्रबंधन स्वयं कर रहे हैं तो आपको ADO.NET लेनदेन को स्वयं करना चाहिए Commit()
।
sess.Flush();
currentTransaction.Commit();
यदि आप अपने परिवर्तन नहीं करने का निर्णय लेते हैं:
tx.Rollback(); // rollback the transaction
या:
currentTransaction.Rollback();
यदि आप लेन-देन रोलबैक करते हैं, तो आपको तुरंत चालू सत्र को बंद करना चाहिए और यह सुनिश्चित करना चाहिए कि NHibernate की आंतरिक स्थिति सुसंगत है।
ISession को बंद करना
एक ISession.Close()
सत्र के अंत को चिह्नित करने के लिए एक कॉल । क्लोज़ () का मुख्य निहितार्थ यह है कि ADO.NET कनेक्शन सत्र द्वारा त्याग दिया जाएगा।
tx.Commit();
sess.Close();
sess.Flush();
currentTransaction.Commit();
sess.Close();
यदि आपने अपना कनेक्शन प्रदान Close()
किया है, तो इसका संदर्भ देता है, इसलिए आप इसे मैन्युअल रूप से बंद कर सकते हैं या इसे पूल में वापस कर सकते हैं। अन्यथा Close()
इसे पूल में लौटा देता है।