सबसे पहले, एसक्यूएल सर्वर में नेस्टेड लेनदेन जैसी कोई चीज नहीं है . यह महत्वपूर्ण है।
दूसरा, दोनों TransactionScopes conn1 का उपयोग करते हैं, इसलिए आप (SQL सर्वर स्तर पर) @@TRANCOUNT
में वृद्धि कर रहे हैं प्रत्येक के लिए BEGIN TRANSACTION
सरल व्याख्या:आंतरिक लेन-देन तब किया जाता है जब बाहरी लेन-देन होता है क्योंकि आंतरिक को वापस रोल करने से दोनों रोलबैक हो जाएंगे लेन-देन
यानी, COMMIT TRANSACTION
(.Complete
और .Dispose
) कमी @@TRANCOUNT
जबकि ROLLBACK TRANSACTION
(.Dispose
केवल) इसे वापस शून्य पर ले जाता है। इसलिए "नेस्टेड ट्रांजैक्शन जैसी कोई चीज़ नहीं" के कारण आंतरिक रोलबैक दबा दिया जाता है
यदि आप आंतरिक 'स्कोप में conn2 का सही ढंग से उपयोग करते हैं तो यह अपेक्षा के अनुरूप काम करेगा क्योंकि 2 लेनदेन डेटाबेस सर्वर स्तर पर असंबंधित हैं। यह कहाँ मायने रखता है...