2

мне нужно некоторые разъяснения, как MS-DTC будет вести себя в случае приведенного нижеMSDTC и изоляция уровня

1) У меня есть более чем одно соединение в пределах TransactionScope (уровень изоляции - ReadCommited), что приведет MS- DTC в действие:

a) Будет ли MS-DTC автоматически менять уровень изоляции на SERIALIZABLE.

b) (Imp) Если выше ответ да, и я реализовал уровень изоляции на основе версии Row, т. Е. Помимо TransactionScope, я также включил параметр базы данных READ_COMMITTED_SNAPSHOT «ВКЛ», будет ли он оставаться в силе, будет ли он поддерживать Уровень изоляции «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

Смежные вопросы