मैं कोड का एक टुकड़ा है कि (ClearImportTable और InsertPage प्रक्रियाओं जमा हो जाती है) कुछ इस तरह दिखता है:संग्रहित प्रक्रियाओं का उपयोग करके LINQ से SQL में लेन-देन का उपयोग कैसे करूं?
datacontext.ClearImportTable() //Essentially a DELETE FROM table
for (int i = 1; i < MAX_PAGES; ++i){
datacontext.InsertPage(i); //Inserts data into the table
}
यह मेरा कोड की कुछ हद तक एक सरलीकृत संस्करण है, लेकिन यह विचार है कि यह डालने से पहले मेज साफ करता है रिकॉर्ड। एकमात्र समस्या यह है कि यदि ClearImportTable के बाद कोई त्रुटि उत्पन्न होती है, तो तालिका के सभी डेटा मिटा दिए जाते हैं। क्या लेन-देन में इसे लपेटने का कोई तरीका है ताकि अगर कोई गलती हो, तो सब कुछ वापस रखा जाएगा? एक अपवाद तब होता है या का उपयोग कर ब्लॉक transaction.Complete() तो सब कुछ ब्लॉक का उपयोग में की जाने वाली वापस लुढ़का हुआ है मार बिना छोड़ दिया जाता है, तो
using (var transaction = new TransactionScope())
{
// do stuff here...
transaction.Complete();
}
:
इसके लिए एमएसडीटीसी का उपयोग करने की आवश्यकता है, जो हमेशा एक अच्छा विचार नहीं है। –
मेरा मानना है कि एमएसडीटीसी केवल तभी जरूरी है जब आप ट्रांसकेशन के भीतर एक से अधिक linq डेटाकेंटेक्स्ट बनाते हैं और उनके खिलाफ क्वेरी चलाते हैं। यदि आप लेन-देन के दायरे में केवल एक डाटाकेंटेक्स्ट ऑब्जेक्ट बनाते हैं तो इसकी आवश्यकता नहीं है। –
एमएसडीटीसी केवल तभी जरूरी है जब एकाधिक संसाधन प्रबंधक शामिल हों। जब तक आप केवल एक डेटाकॉन्टेक्स्ट को शामिल करते हैं और एक एकल SQL सर्वर इंस्टेंस से कनेक्ट करते हैं, तो आपको हल्के लेनदेन का उपयोग करना चाहिए। – jrista