我必须使用在每Commit()
或Rollback()
之后重新使用或重新创建交易的公司类。该类被告知通过Boolean
ctor参数使用(或不使用)事务。
我正在考虑将此API包装起来以分离事务支持(显式依赖于Transaction对象或环境TransactionScope
)。但这需要一个可重用的事务类。 .NET中有这样的类吗?或者我将如何开始自己开发?
答案 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
类型具有单独的非交易“确认”行为。我可以单独确认我已完成处理的消息。这允许我避免基于会话生命周期的事务。