PetaPoco交易没有回滚

时间:2013-12-22 19:05:39

标签: asp.net exception transactions rollback petapoco

也许这是一个非常棒的问题,因为我对使用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

如果其中一个数据库操作失败,事务将不会回滚。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是我没有正确处理“调用/不调用”scope.Complete()基于沿路径截获的异常。 特别是我有一个布尔标志“rollBackTransaction”开始为false,然后如果事务中的任何try / catch块引发异常,则更新为true。 最后我刚检查了一下:

                    If Not rollBackTransaction Then
                        scope.Complete()
                    End If

这也适用于Simon提出的TransactionScope,如果在关闭Using块之前未调用.Complete(),最终将回滚事务。

现在是什么原因造成了一个错误的标志,因此每次都调用scope.Complete()方法,就是我在事务中调用了一个sub,它有自己的异常处理,因此永远不会在主事务块中引发异常正确更新“rollBackTransaction”标志。

我学到的是,如果你在事务中使用try / catch,请确保你调用的外部方法在它们掉落时引发异常,并根据你将调用范围一直更新一个标志。完整()。

无论如何Simon,谢谢你指出我不知道的.NET功能似乎非常有用! 想知道它还包括在交易...文件系统更改?