也许这是一个非常棘手的问题,因为我对处理PetaPoco事务相当陌生。使用PetaPoco作为microORM处理db事务所面临的问题是,如果我在事务的.Complete()方法之前抛出异常,则所有内容都将正确回滚,但如果在
Using scope As PetaPoco.Transaction = db.GetTransaction()
' try/catch here and if the db command fails transaction won't roll back
scope.Complete()
End Using如果其中一个db操作失败,事务不会回滚。我怎么才能解决这个问题?
发布于 2013-12-26 16:22:43
问题是我没有正确处理基于路径上截获的异常的“调用/不调用”-- scope.Complete()。特别是,我有一个布尔标记"rollBackTransaction“开始为false,然后更新为true,如果事务中的try/catch块在引发和异常中出现。最后我检查了一下:
If Not rollBackTransaction Then
scope.Complete()
End If如果在关闭Using块之前没有调用TransactionScope (),那么西蒙维奇建议的.Complete将最终回滚一个事务。
现在,导致错误标志并因此每次调用scope.Complete()方法的原因是,在事务中,我调用了一个分区,它有自己的异常处理,因此不会在主事务块中引发异常,以正确更新"rollBackTransaction“标志。
我学到的是,如果在事务中使用try/catch,请确保调用的外部方法在失败时引发异常,并始终基于wich更新标志,您将调用scope.Complete()。
不管怎么说,西蒙,谢谢你指出我不知道的.NET特性似乎非常有用!想知道交易中还会包括什么.文件系统变更?
https://stackoverflow.com/questions/20732967
复制相似问题