私のC#コードでは、ネストされたトランザクションスコープを使用しています。TransactionScopeオブジェクトを同じように作成するユーティリティクラスがあります。外側のスコープと内側のスコープはどちらもまったく同じ方法で構築されます。
以下の最初の例のようにTransactionScopeオブジェクトを作成すると、ネストされたトランザクションスコープはうまく連携します。
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}
ただし、次のようにTransactionScopeオブジェクトを作成すると、例外が発生します。
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
Timeout = TransactionManager.MaximumTimeout
};
return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}
エラーは次のとおりです。「TransactionScopeに指定されたトランザクションのIsolationLevelは、スコープに要求された値とは異なります。パラメーター名:transactionOptions.IsolationLevel」。
オブジェクトの初期化を使用するとこの動作が発生する理由を誰かに説明できますか?