संक्षिप्त उत्तर:नहीं
लंबा उत्तर:
केवल TransactionScope को परिभाषित करने से यह परिभाषित नहीं होता है कि लेन-देन के भीतर किसी भी पढ़ने या लिखने को लागू किया जाएगा।
लेन-देन के भीतर कुछ चलाने के लिए, आपको अभी भी एक लेनदेन खोलना और करना होगा!
TransactionOptions
Timeout
. के लिए TransactionScope का और IsolationLevel
बस डिफ़ॉल्ट को परिभाषित करें उन विकल्पों के बिना स्पष्ट रूप से सेट किए गए दायरे के भीतर बनाए गए किसी भी लेनदेन के लिए। वास्तव में TransactionScope एक Transaction बनाता है लेकिन यह एक नया Transaction खोले बिना सक्रिय नहीं होगा। आंतरिक रूप से यह कुछ जटिल चीजें करेगा, लेन-देन की क्लोनिंग आदि... तो चलिए इसे अनदेखा करते हैं...
लेन-देन के बिना आप अलगाव स्तर को परिभाषित नहीं कर सकते हैं, कोई भी चयन कथन IsolationLevel.ReadCommitted
के साथ चलाया जाएगा क्योंकि यह SQL सर्वर का डिफ़ॉल्ट है।
आप session.Transaction.IsActive
. को भी क्वेरी कर सकते हैं यह देखने के लिए कि सत्र के लिए वर्तमान में कोई लेनदेन सक्रिय है या नहीं!
आइए निम्नलिखित कोड पर एक नज़र डालें, मैंने इसे थोड़ा और स्पष्ट करने के लिए कुछ टिप्पणियां दी हैं
using (var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions()
{
IsolationLevel = IsolationLevel.ReadUncommitted
}))
{
using (var session = sessionFactory.OpenSession())
{
// outside any transaction...
var x = session.Transaction.IsActive; // false;
// read will be done with SQL Server default (ReadCommited)
var pp = session.Query<Page>().Where(p => p.Photos.Count() > 1).ToList();
using (var transaction = session.BeginTransaction())
{
// will use ReadUncommitted according to the scope
var y = session.Transaction.IsActive; // true;
var p1 = session.Get<Page>(1);
transaction.Commit();
}
using (var transaction = session.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
{
// will use ReadCommitted according to the transaction initialization
var y = session.Transaction.IsActive; // true;
var p1 = session.Get<Page>(1);
transaction.Commit();
}
scope.Complete();
}
}
आप SQL सर्वर प्रोफाइलर का उपयोग करके यह भी देख सकते हैं कि SQL सर्वर उन सेटिंग्स पर कैसे प्रतिक्रिया करता है।
बस एक नया ट्रेस बनाएं और Audit Login
. के लिए देखें घटना, घटना के पाठ में अलगाव स्तर शामिल होगा और आप देख सकते हैं कि यह वास्तव में एक Audit Login
करता है हर बार जब कोई लेन-देन बनाया जाता है, उदाहरण के लिए
set transaction isolation level read uncommitted
--
कृपया मुझे सुधारें यदि इनमें से कोई भी जानकारी गलत हो सकती है, तो मैंने इसे स्वयं ही समझ लिया है, इसलिए विफलता की कुछ संभावना हो सकती है;)