检查现有的transactioncope是否处于活动状态

web*_*oob 6 c# transactions transactionscope nested-transactions

我在用:

public class TransactionUtils
{
    public static TransactionScope CreateTransactionScope()
    {
        var TransactionOptions = new TransactionOptions();
        TransactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
        TransactionOptions.Timeout = TimeSpan.MaxValue;
        return new TransactionScope(TransactionScopeOption.Required, TransactionOptions);
    }
}
Run Code Online (Sandbox Code Playgroud)

创建我的所有交易.我遇到的问题是当我窝2时TransactionUtils.CreateTransactionScope()我得到一个错误:Time-out interval must be less than 2^32-2. Parameter name: dueTm.我假设这是因为它试图将子事务附加到父事务,并且组合的超时很大.

有没有办法判断新创建的事务是否是嵌套事务,这样我可以避免设置超时?

另一种方法是传递一个参数,CreateTransactionScope()所以我可以告诉它它是嵌套的而不是设置超时但我宁愿找到一种自动处理它的方法.

eno*_*l76 28

有一个非常简单的答案:

System.Transactions.Transaction.Current != null
Run Code Online (Sandbox Code Playgroud)

这适用于Framework 2.0.

我不确定为什么另一个答案会如此深入,以创建链接到非公共领域的IL.

  • 刚刚调查了这个 (yay ILSpy) Current 可以抛出异常,如果你在一个事务中,并且 TransactionScope 是完整的。只是为了让您考虑到您可能会收到异常的事实 (2认同)