Doo*_*fin 5 .net c# transactionscope object-initialization
在我的 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);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样构造 TransactionScope 对象,则会出现异常:
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
Timeout = TransactionManager.MaximumTimeout
};
return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
}
Run Code Online (Sandbox Code Playgroud)
错误内容为:“为 TransactionScope 指定的事务的 IsolationLevel 与为范围请求的值不同。参数名称:transactionOptions.IsolationLevel ”。
谁能向我解释为什么使用对象初始化会导致这种行为?
您绝对确定只有交换上述方法才会导致异常吗?它们在功能上应该是 100% 等效的。
只需空运行这两个变体就可以了:
using (var aa1 = CreateTransactionScopeGood())
using (var aa2 = CreateTransactionScopeGood())
Console.WriteLine("this will be printed");
using (var aa1 = CreateTransactionScopeBad())
using (var aa2 = CreateTransactionScopeBad())
Console.WriteLine("this will be printed");
Run Code Online (Sandbox Code Playgroud)
能提供一下重现的方法吗?
然而,只有在同一事务中混合不同的情况时,我才能重现您的异常IsolationScope,这确实应该导致异常:
using (new TransactionScope(TransactionScopeOption.Required, new
TransactionOptions { IsolationLevel = IsolationLevel.Chaos }))
using (new TransactionScope(TransactionScopeOption.Required, new
TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
Console.WriteLine("this will not be printed");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |