2010-05-17 15 views
18

एक परीक्षण में जहां मैं एक वस्तु को जारी रखना चाहता हूं और फिर साबित करता हूं कि इसे डीबी (और सत्र नहीं) से लाकर इसे जारी रखा गया था, मुझे निम्नलिखित के बीच कोई अंतर नहीं दिखता:NHibernate सत्र। फ्लश और Evict बनाम साफ़

// save it 
session.Clear() 
// fetch it 

या

// save it 
session.Flush() 
session.Evict(_instance) 
// fetch it 

आलसी प्रोग्रामर मुझ में दो से अधिक एक पंक्ति की ओर leans। क्या दो कारणों के पक्ष में मुझे कुछ कारण याद आ रहा है?

उत्तर

23

सत्र। वास्तव में सभी लंबित बचत/अपडेट/आदि रद्द करता है।

यदि ऐसा नहीं होता है, तो ऐसा इसलिए होता है क्योंकि आप पहचान का उपयोग कर रहे हैं ताकि इकाई फ्लश किए बिना जारी रहे।

+1

मैं * पहचान का उपयोग कर रहा हूं - यह फ्लश और बेदखल करने का एक शानदार कारण है! चीयर्स – Berryl

+1

बीटीडब्ल्यू, सत्र नहीं होगा। फ्लश और सत्र। फ्लश और इविक्ट के समान प्रभाव प्राप्त करें? मेरा मानना ​​है कि यह तब भी बेहतर है क्योंकि जब तक परिभाषित नहीं किया जाता है तब तक Evict कैस्केड नहीं होगा। – Rita

+0

@ रीटा। हाँ मुझे लगता है कि आप इसके बारे में सही हैं। डिएगो ने जो कहा, उसके बारे में एहसास करने वाली चाबियों में से एक यह है कि स्पष्ट रद्द * लंबित * बचाता है। मैं आमतौर पर इन दिनों क्या करता हूं सब कुछ एक ट्रान्सक्शन के अंदर लपेटता है; इसलिए सहेजें एक अलग टीएक्स के अंदर है और टीएक्स के माध्यम से प्रतिबद्ध है। सत्र से पहले कॉल करें। क्लीयर() और इसलिए लंबित नहीं है। HTH – Berryl

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