2

根據這篇文章http://social.technet.microsoft.com/wiki/contents/articles/handling-transactions-in-sql-azure.aspx實體框架的交易和SQL Azure的默認隔離級別

SQL Azure default database wide setting is to enable read committed 
snapshot isolation (RCSI) 

我是正確的假設:

A)下面的代碼默認爲序列化(覆蓋數據庫的默認)

 using (TransactionScope transaction = new TransactionScope()) 
     {                

     } 

B)以下代碼默認爲ReadCommitted with Snapshot Isolation(而不僅僅是簡單的ReadCommitted)

 TransactionOptions options = new TransactionOptions(); 
     options.Timeout = TimeSpan.FromMinutes(1); 
     options.IsolationLevel = IsolationLevel.ReadCommitted; 

     using (TransactionScope transaction = new 
      TransactionScope(TransactionScopeOption.Required, options)) 
     {                

     } 

回答

3

a)是的。默認情況下,隔離級別是可序列化的。 http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx

b)對於該事務,isolationlevel將只是ReadCommitted。對於快照,你需要

options.IsolationLevel = IsolationLevel.Snapshot; 

http://msdn.microsoft.com/en-us/library/system.data.isolationlevel.aspx

+0

所以我需要使用具有快照的事務範圍來啓用SQL Azure上的讀取已提交快照。另外,任何在transactionscope之外的選擇 - 例如一個簡單的選擇objectcontext.employees.Select(e => e.FirstName) - 將是默認的數據庫隔離級別,SQL Azure中的讀取已提交快照? – user529265 2012-08-04 05:20:09

+0

當然,當您在該事務之外執行選擇時,它將再次默認爲已提交。 – jeroenverh 2012-08-04 07:43:49

0

我不知道,我認爲你的事務隔離級別將僅限快照不讀提交快照這是兩個不同的隔離

它不同於快照隔離在讀取器 中提供了當事務開始時可用的最後提交版本的行,讀取器獲取當語句開始時可用的行的最後提交版本