以下に示すシナリオでMS-DTCがどのように動作するかを明確にする必要があります
1) トランザクション スコープ (分離レベル - ReadCommited) 内に複数の接続があります。これにより、MS-DTC が動作します。
a) MS-DTC は自動的に分離レベルを SERIALIZABLE に変更しますか。
b) (Imp) 上記の答えが「はい」で、行のバージョン管理ベースの分離レベルを実装している場合、つまり TransactionScope に加えて、READ_COMMITTED_SNAPSHOT データベース オプションも有効にしています。レベル。
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();
}
}
ありがとう