3

嗨,我在我的应用程序的几个地方使用 TransactionScope。像:

using (var scope = new TransactionScope())
{
        ToDo1();
        ToDo2();
        scope.Complete();
}

我希望有可能在一个地方禁用我的所有 TransactionScope。

我想像 MyTransactionScope 类之类的东西,我可以在其中定义是否要使用它。

你能给我一个提示如何实现它吗?

谢谢你。

4

2 回答 2

6

我已经做到了。你不能继承TransactionScope,因为它是密封的。相反,您将类包含在MyTransactionScope类中。还要实现IDisposable,以便您可以在 using 构造下调用它。以及expose.Complete()等相关方法。这些方法将在内部调用内部包含的对象。

public sealed class MyTransactionScope : IDisposable
{
    TransactionScope _transactionScope = null;

    #region Overloaded Constructors
    public MyTransactionScope()
    {
        _transactionScope = new TransactionScope();
    }

    public MyTransactionScope(Transaction transactionToUse)
    {
        _transactionScope = new TransactionScope(transactionToUse);
    }
    #endregion

    public void Complete()
    {
        _transactionScope.Complete();
    }

    public void Dispose()
    {
        _transactionScope.Dispose();
    }
}
于 2012-08-09T18:44:47.530 回答
2

如果您的意思是我认为的意思,那么您应该能够使用Suppress事务范围选项:

using (var scope = new TransactionScope())
{
        using(TransactionScope scope2 = new TransactionScope(TransactionScopeOption.Suppress)) {
           ToDo1();
           scope2.Complete();
        }

        // If ToDo2 throws an exception and the transaction is rolled back,
        // ToDo1 will still be committed since it did not participate in the
        // original (ambient) transaction.
        ToDo2();       
        scope.Complete();
}
于 2012-08-09T18:29:53.120 回答