2009-10-28 15 views
10

मैं लिंक से एसक्यूएल में डेटा जमा करने के लिए ट्रांज़ेक्शनस्कोप का उपयोग कर रहा हूं। मेरा सवाल यह है कि, यदि मैं एक ही दायरे में एकाधिक सबमिटChanges का उपयोग करता हूं, तो क्या सभी त्रुटि किसी त्रुटि के मामले में वापस आ जाएंगे या अंतिम सबमिटChanges के बाद किए गए परिवर्तन? उदाहरण के लिए:लिंक सबमिट करने के लिए एकाधिक सबमिट चेंज और लेनदेन रोलबैक

using (TransactionScope trans = new TransactionScope()) 
{ 
    using (dbDataContext db = new dbDataContext()) 
    { 
     try 
     { 
      //do some insert 
      db.SubmitChanges(); 

      //do some updates 
      db.SubmitChanges(); 

      trans.Complete(); 
     } 
     catch(Exception ex){} 
    } 
} 

यदि सबमिट करें चेंज चेंज एक अपवाद फेंकता है, तो सबमिट चेंज चेंज भी वापस रोल करेगा?

+2

इसी तरह के प्रश्न को देखें - http://stackoverflow.com/questions/542525/transactionscope-vs-transaction-in-linq2sql - विशेष रूप से, पहला जवाब –

उत्तर

8

सभी परिवर्तन वापस सबमिट होंगे, न केवल अंतिम सबमिटChanges() से एक।

आपको अक्सर इस पैटर्न का उपयोग करने की आवश्यकता होगी जब आपके पास डेटा है जो अन्य डेटा पर निर्भर करता है - जैसे कि आपको कोई ऑब्जेक्ट बनाने की आवश्यकता है और कुछ और करने के लिए इसे स्वत: जेनरेट आईडी प्राप्त करें (हालांकि L2SQL इसका समर्थन करता है एक सबमिटChanges केवल ऑब्जेक्ट बनाकर अधिकांश परिदृश्यों में कॉल करता है, लेकिन मैं digress ...)।

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