Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将包装器写入TransactionScope_C#_Design Patterns - Fatal编程技术网

C# 如何将包装器写入TransactionScope

C# 如何将包装器写入TransactionScope,c#,design-patterns,C#,Design Patterns,嗨,我在我的应用程序的几个地方使用TransactionScope。比如: using (var scope = new TransactionScope()) { ToDo1(); ToDo2(); scope.Complete(); } 我想在一个地方禁用我所有的TransactionScope 我想象着类似MyTransactionScope类的东西,在这里我可以定义是否要使用它 你能给我一个如何实现的提示吗 谢谢。如果您的意思是我认为您的

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

using (var scope = new TransactionScope())
{
        ToDo1();
        ToDo2();
        scope.Complete();
}
我想在一个地方禁用我所有的TransactionScope

我想象着类似MyTransactionScope类的东西,在这里我可以定义是否要使用它

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


谢谢。

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

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

我已经做到了。您无法继承
TransactionScope
,因为它是密封的。相反,您将该类包含在
MyTransactionScope
类中。还实现了
IDisposable
,这样您就可以在使用construct下调用它。并公开
.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();
    }
}

禁用事务范围是什么意思?你的意思是你在交易范围内有一个声明,你不想参与交易?+1-他没有澄清他的确切意思,但我怀疑这可能是他想要的。@EricPetroleje是的,我在这条船上。因此,需要有一个单一的地点来进行交易范围作为NOP操作。(什么也不做)只是在最近的一个项目中,他们有多个数据库,无法让DTC在他们的开发环境中工作。如果我提前知道这可能是一个问题,构建这样的类会让事情变得更容易。@Lindsay要使用它,请将
TransactionScope
替换为
MyTransactionScope
。@下面的Ankush正好表达了我的意思。