मैं ईएफ 4.0 का उपयोग कर रहा हूं, और मैं अलगाव स्तर serializable
का उपयोग करना चाहता हूं, क्योंकि एक लेनदेन में मैं पढ़े जाने पर एक रजिस्टर को ब्लॉक करना चाहता हूं।अलगाव स्तर को कैसे बदला जाए?
खैर, एसक्यूएल सर्वर में मैं इस आदेश के साथ अलगाव के स्तर को बदलने की कोशिश:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
और सी # में मैं रजिस्टर ब्लॉक करने के लिए प्रयास करने के लिए इस कोड का उपयोग:
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable }))
{
Entities myContext = new Entities();
string colors = "select * from Colors where IDColor = 2";
Colors myColor = myContext.Colors.SqlQuery(colors).FirstOrDefault<Colors>();
myColor.Color = "Red";
myContext.SaveChanges();
scope.Complete();
}
अगर मैं अगर मैं SaveChanges
प्राप्त करता हूं, तो मुझे कोड को लाइन से निष्पादित करें, लेकिन अगर मैं SQL सर्वर प्रबंधन स्टूडियो के साथ तालिका रंगों के लिए कोई क्वेरी करता हूं तो उदाहरण के लिए, मैं रिकॉर्ड प्राप्त कर सकता हूं।
फिर, यदि मैं सहेजने के परिवर्तन निष्पादित करता हूं और मुझे scope.Clompete()
मिलता है, तो अगर मैं प्रबंधन स्टूडियो के साथ क्वेरी का प्रयास करता हूं, तो मुझे कुछ भी नहीं मिलता है क्योंकि रजिस्टर अवरुद्ध है, इसलिए जब मैं अपना सी # कोड समाप्त करता हूं, तो रजिस्टर जारी होता है और मुझे प्रबंधन स्टूडियो में परिणाम मिलता है।
तो मेरा सवाल है, सी # में धारावाहिक अलगाव स्तर का उपयोग कैसे करें? क्या मुझसे कुछ गलत हो रही है? मैं देख रहा हूँ
DBCC useroptions;
कि अलगाव स्तर serializable
है, लेकिन अगर मैं प्रबंधन स्टूडियो बंद करके फिर से कनेक्ट करने और देखने के अलगाव स्तर डिफ़ॉल्ट readCommitted
है:
पी.एस .: मुझे लगता है कि अगर मैं इस आदेश का उपयोग पर ध्यान दें।
तो मेरा प्रश्न है कि मेरे डेटाबेस के लिए डिफ़ॉल्ट अलगाव स्तर कैसे सेट करें।
मुझे समझ में नहीं आता है। आप पहले से ही एक serializable लेनदेन का उपयोग कर रहे हैं। क्या आप समझा सकते हैं कि आप अलग-अलग क्या चाहते हैं? – usr