2

我需要一些澄清MS-DTC将如何在下面MSDTC和隔离级别

1)我有一个TransactionScope内的多个连接(隔离级别定的场景表现 - ReadCommited),这将带来MS-DTC立即采取行动:

a)MS-DTC会自动将隔离级别更改为SERIALIZABLE。 (Imp)如果上面的答案是肯定的,我已经实现了基于Row版本化的隔离级别,即除了TransactionScope,我还启用了READ_COMMITTED_SNAPSHOT数据库选项“ON”,它是否仍然有效,意味着它会支持“SERIALIZABLE”隔离级别。

void OuterMethod() { 
    TransactionOptions tso = new TransactionOptions(); 
    tso.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; 
    using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew, tso)) { 
     InnerMethod("select * from testtable"); 
     InnerMethod("update testtable set col1 = N'new value'"); 
     tx.Complete(); 
    } 
} 

static void InnerMethod(string sqlText) { 
    using (SqlConnection conn = SqlConnection(connStr)) { 
     conn.Open(); 
     SqlCommand cmd = conn.CreateCommand(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

感谢

回答

2

序列化是默认的隔离级别,但MS DTC will respect the Isolation Level you specify in your TransactionOptions

UPDATE

1)是,MS DTC将参与其中。

1a)否(见上文)。

1b)上一个答案不是肯定的,但我的理解是,只有在读取提交隔离级别时,READ_COMMITTED_SNAPSHOT才有效。其他隔离级别将强制执行自己的锁定模型。 "When the READ_COMMITTED_SNAPSHOT option is set to ON, read operations under the read committed isolation level are based on row versions and are executed in a nonlocking mode."

+0

其他答案详细 – Buzz 2009-11-27 08:36:05