2009-08-26 11 views
12

क्या Session.Save और Transaction.Commit के बीच कोई अंतर है?NHibernate: सत्र। सेव और लेनदेन। टिप्पणी

जब मुझे इसका उपयोग करना चाहिए?

ऐसा लगता है कि कभी-कभी Session.SaveTransaction.Commit के साथ संयोजन में उपयोग करना चाहिए, कभी-कभी नहीं। क्या कोई बता सकता है कि ऐसा क्यों है?

+1

ट्रांसमिशन। कॉमिट या लेनदेन। कॉमिट? – twk

उत्तर

13

वे differenrt हैं - Session.Save किसी ऑब्जेक्ट को बचाता है और Transaction.Commit काम का एक समूह (एकाधिक गेट्स, लोड, सेव, अपडेट इत्यादि) करता है।

आप दोनों का उपयोग करना चाहेंगे। अधिक पढ़ने के लिए एक लिंक के साथ एक त्वरित स्पष्टीकरण यहां दिया गया है।

एक ISession में, हर डेटाबेस कार्रवाई एक सौदे कि डेटाबेस कार्यों (यहां तक ​​कि केवल पढ़ने के संचालन) को अलग कर के अंदर होता है: NHibernate प्रलेखन निम्नलिखित कहते हैं।

यदि आप स्पष्ट रूप से अपने लेनदेन को परिभाषित नहीं करते हैं, तो प्रत्येक बार जब आप डेटाबेस से पढ़ते हैं या लिखते हैं तो एक निश्चित रूप से बनाया जाएगा। बहुत कुशल नहीं है। तो अगर आप अभी पढ़ रहे हैं, तो आप सबकुछ एक लेनदेन के अंदर रखना चाहते हैं और जब आप पूरा कर लें तो लेनदेन करें। Ayende Rahien this blog post में आगे बताते हैं।

जब आप वहां कुछ कोड नमूने देखते हैं, तो ऐसा लगता है कि लोग लेनदेन का उपयोग नहीं कर रहे हैं, लेकिन वे केवल उस कोड के बाहर लेनदेन शुरू कर रहे हैं जो आप देख रहे हैं। मेरे एएसपी.Net एमवीसी ऐप में, उदाहरण के लिए, मैं अपने नियंत्रक क्रियाओं के बाहर लेनदेन को संभालने के लिए एक एक्शन फ़िल्टर (ट्रांसएक्शनएट्रिब्यूट) का उपयोग करता हूं।

+0

अच्छा स्पष्टीकरण: TransactionAttribute सुझाव के लिए +1 – Graviton

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