2011-08-08 8 views
9

मेरा मानना ​​है कि मैं TransactionScopeOption.Suppress और TransactionScopeOption.Required समझता हूं लेकिन मुझे TransactionScopeOption.RequiresNew क्या समझने में कठिनाई हो रही है। आखिरी स्पष्टीकरण के आधार पर जो मैंने पढ़ा है, क्या कोड के निम्नलिखित दो ब्लॉक कार्यात्मक रूप से समान होंगे? क्या यह RequiresNew का सटीक प्रतिनिधित्व है?लेनदेन को समझनास्कोप विकल्प: आवश्यकताएँ नया = दबाएं + आवश्यक?

using (var ts1 = new TransactionScope(TransactionScopeOption.RequiresNew)) 
{ 
    DoStuff(); 
    ts1.Complete(); 
} 

और

using (var ts2 = new TransactionScope(TransactionScopeOptions.Suppress)) 
{ 
    using (var ts3 = new TransactionScope()) 
    { 
    DoStuff(); 
    ts3.Complete(); 
    } 

    ts2.Complete(); // not required but recommended for consistency's sake 
} 

उत्तर

11

लेन-देन की अच्छी समझ प्राप्त करने के लिए दायरों में से किसी this msdn article

पढ़ सकते हैं मैं एक अच्छा विवरण कैसे उन दो उस नंबर को छोड़कर अलग होगा नहीं मिल सकता है बनाए गए नेस्टेड स्कोपों ​​के अलग-अलग हैं। दोनों मामलों में लेनदेन की एक ही राशि होनी चाहिए, भले ही लेनदेन पहले से मौजूद है या नहीं। मुझे संदर्भ देने के लिए एक अच्छा संसाधन नहीं मिल रहा है, लेकिन मैं हमेशा एक संयुक्त suppress/आवश्यक पर RequiredNew के लिए जाना होगा। आवश्यक है मूल रूप से इसका मतलब है: "भले ही कोई लेनदेन न हो या न हो, मुझे एक नया दें"।

अद्यतन: मामले में पहले लिंक टूट बनी हुई है आप वेबैक संग्रह here

+0

पहले से ही किया था में पा सकते हैं, कि क्या मुझे इस धारणा दे दी है। उद्धरण: "' आवश्यक है ': निहित कोड लेनदेन पर निर्भर करता है, लेकिन स्वतंत्र रूप से प्रतिबद्ध या वापस लुढ़का जाना चाहिए।' दबाएं ': निहित कोड अपना मुआवजा करता है, इसलिए लेनदेन का हिस्सा नहीं होना चाहिए। " इसका मतलब है (मेरे लिए) "काम करना" या "रोलिंग बैक" एक आवश्यक है नया लेनदेनस्कोप बाहरी लेनदेन पर छेड़छाड़ या निर्भर नहीं किया जा सकता है - न तो कोई दूसरे को प्रभावित करता है। यही है कि दबाने को इसके अंदर आवश्यक लेनदेनस्कोप के साथ क्या करना चाहिए। – Jaxidian

+0

सभी ईमानदारी में मैंने आपके दूसरे कोड ब्लॉक को गलत तरीके से पढ़ा और सोचा कि आपके पास 2 नेस्टेड लेन-देन() हैं (मुझे बाहरी पर दबाने से चूक गया)। मैं – Eddy

+2

संपादित करूँगा और केवल स्पष्टीकरण के लिए ... यदि मैं आवश्यक लेनदेन को रोलबैक करता हूं, तो किसी भी तरह से पेरेंट ट्रांजैक्शनस्कोप को प्रभावित नहीं करता है, और इसी तरह, यदि मैं एक पैरेंट ट्रांज़ेक्शनस्कोप रोलबैक करता हूं, तो किसी भी तरह से आवश्यक लेनदेन को प्रभावित नहीं करता है? क्षमा करें, बस यह सुनिश्चित करना चाहते हैं कि मैं इन विकल्पों को पूरी तरह से समझूं। यदि मैं इन मिश्रित हो जाता हूं तो संभावित रूप से गंदे साइड इफेक्ट्स (डेडलॉक, गैर-परमाणु संचालन आदि) बहुत सारे हैं! – Jaxidian

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