您好我在我的应用中的几个地方使用TransactionScope。像:
using (var scope = new TransactionScope())
{
ToDo1();
ToDo2();
scope.Complete();
}
我希望有可能在一个地方禁用我的所有TransactionScope。
我想象MyTransactionScope类,我可以定义是否要使用它。
你能给我一个如何实现它的提示吗?
谢谢。
答案 0 :(得分:5)
我做到了这一点。您不能继承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 :(得分: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();
}