6

मैं अपनी परियोजना में TransactionScope का उपयोग करना चाहता हूं। मैंने इसके बारे में पढ़ा और मैंने पाया कि यह डेटाबेस में एक अंतर्निहित लेनदेन बनाता है। मैं जानना चाहता हूं कि TransactionScope लॉक टेबल जो इसे कुशलतापूर्वक उपयोग करता है?लेनदेनस्कोप लॉकिंग टेबल और अलगाव लेवल

इस कोड में उदाहरण के लिए:

using (Entities ent = new Entities()) 
{ 
    using (TransactionScope tran = Common.GetTransactionScope()) 
    { 
     var oldRecords = ent.tblUser.Where(o => o.UserID == UserID); 

     foreach (var item in oldRecords) 
     { 
      ent.tblUser.DeleteObject(item); 
     } 

और

public static TransactionScope GetTransactionScope() 
{ 
    TransactionOptions transactionOptions = new TransactionOptions(); 
    transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable; 
    return new TransactionScope(TransactionScopeOption.Required, transactionOptions); 
} 

tblUser तक Complete आदेश मुद्दा बंद कर दिया है?

क्या IsolationLevel स्पष्ट लेनदेन के समान स्पष्ट लेनदेन में है?

धन्यवाद

उत्तर

9

यह एसक्यूएल सर्वर कि ताला करता है - यदि आवश्यक हो तो। कोई भीUPDATE या DELETE ऑपरेशन अनन्य ताला उन पंक्तियों पर प्रभाव डालना चाहिए - यदि वे पहले से ही किसी अन्य लेनदेन से लॉक हैं, तो यह ऐसा नहीं कर सकता है।

तो आपके मामले में, यदि आप डेटाबेस से कई पंक्तियों को हटा चुके हैं, तो डिफ़ॉल्ट रूप से SQL सर्वर उन पंक्तियों को केवल लॉक कर देगा - जिन्हें हटाया जा रहा है। यह पूरी मेज को लॉक नहीं करता है। यदि आप एक ही लेन-देन में अधिक तो 5'000 पंक्तियां हटाना, एसक्यूएल सर्वर एक ताला वृद्धि करते हैं और पूरे तालिका लॉक करने की कोशिश करेंगे (बजाय - यह जब तक आप एक बार में पंक्तियों की एक बहुत बड़ी संख्या को नष्ट है 5000+ व्यक्तिगत पंक्ति ताले रखने और प्रबंधित करने के लिए)।

अलगाव स्तर केवल परिभाषित करता है कितनी देर तक पढ़ने एक पंक्ति को लॉक कर देंगे - आम तौर पर एक बहुत ही बहुत ही कम समय - डिफ़ॉल्ट (READ COMMITTED) द्वारा, पंक्ति एक केवल समय इसे पढ़ा जा रहा है के लिए ताला साझा करना होगा। अलगाव स्तर के साथ पढ़ने योग्य पढ़ें, साझा लॉक वर्तमान लेनदेन के अंत तक आयोजित किया जाएगा, और SERIALIZABLE न केवल पंक्तियों को पढ़ा जायेगा, बल्कि पंक्तियों की पूरी श्रृंखला को लॉक करेगा। लेकिन फिर से: कि केवलपढ़ें संचालन को प्रभावित करता है - यह DELETE या UPDATE विवरणों पर कोई सीधा प्रभाव पड़ता है

+0

(एक पंक्ति पर एक साझा लॉक होने यह प्राप्त करने से वंचित रह सकते हैं DELETE के अलावा अन्य अनन्य ताला है कि यह जरूरत है) अच्छा उत्तर। उपरोक्त कोड में @marc_s अगर मैं 'आईडी = 1' के साथ रिकॉर्ड हटा देता हूं और उस पल में कोई अन्य धागा 'आईडी = 1' पढ़ना चाहता है तो क्या हुआ? आपने कहा कि मुझे विशेष लॉक मिलना चाहिए लेकिन 'लेनदेनस्कोप' को तत्काल ताला मिल जाएगा? – Arian

+0

यदि आपका 'डिलीट' लेनदेन अनन्य लॉक हो जाता है, तो कोई अन्य लेन-देन इस पंक्ति को पढ़ नहीं सकता है - इसे लॉक कर दिया जाएगा, और संभवतः समय समाप्त हो जाएगा –

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