В моем коде 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".
Может ли кто-нибудь объяснить мне, почему использование инициализации объекта приводит к такому поведению?