webnoob webnoob -4 years ago 172
C# Question

Check if an existing transactionscope is active

I am using:

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);

to create all my transactions. The problem I am facing is when I nest 2
I get an error:
Time-out interval must be less than 2^32-2. Parameter name: dueTm
. I am assuming this is because it's trying to attach the child transaction to the parent one and the combined timeouts are to large.

Is there a way to tell if a newly created transaction will be a nested one so I can avoid setting a timeout?

The alternative is to pass a parameter to
so I can tell it that's it's nested and not set the timeout but I would rather find an automatic way of handling it.

Answer Source

There's a pretty simple answer:

System.Transactions.Transaction.Current != null

This works since Framework 2.0.

I'm not sure why the other answer goes to such depths to create IL that links to nonpublic fields.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download