我可以重复使用交易吗?如何?

时间:2009-01-08 22:08:02

标签: .net transactions

我必须使用在每Commit()Rollback()之后重新使用或重新创建交易的公司类。该类被告知通过Boolean ctor参数使用(或不使用)事务。

我正在考虑将此API包装起来以分离事务支持(显式依赖于Transaction对象或环境TransactionScope)。但这需要一个可重用的事务类。 .NET中有这样的类吗?或者我将如何开始自己开发?

3 个答案:

答案 0 :(得分:3)

不,事务一旦提交或回滚就不可重用(我相信一旦提交或回滚就试图访问它们会引发异常)。

我的建议是忘记尝试为TransactionScope创建一个包装器,因为它实际上并没有提供任何值,因为TransactionScope模型是隐含的(并且它是它自己的包装器)。只需将using (TransactionScope ts = new TransactionScope())语句放在需要转换的事物周围。使用TransactionScope,每个数据库调用都隐含了事务支持。

答案 1 :(得分:0)

写一个像这样的包装器方法

TransactionScope GetTransaction(bool useTransaction)
{
   if (useTransaction)
   {
      return new TransactionScope( /* ... */ );
   }
   return null;
}

使用-block将很乐意使用null-References,因此您可以像这样编写代码(其中“useTransaction”是您为类提供的布尔参数):

using (var scope = GetTransaction(useTransaction))
{
   // Code here (if useTransaction == true will use the ambient Transaction,
   // otherwhise will not run inside a transaction).

   if (scope != null)
   {
      scope.Complete();
   }
}

答案 2 :(得分:0)

更新: Session类型具有单独的非交易“确认”行为。我可以单独确认我已完成处理的消息。这允许我避免基于会话生命周期的事务。