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