TransactionScope:如果内部范围失败,如何使外部范围继续?

时间:2014-01-16 19:50:30

标签: c# mysql ado.net transactionscope

所以我正在构建一个使用嵌套TransactionScopes的程序。最初,我使用了默认构造函数,但是当我的一个内部作用域失败时,我发现一切都失败了,我无法继续。我想要的是让一个内部作用域在不停止外部作用域的情况下失败,但如果外部作用域失败,我希望回滚所有内部作用域。这可能吗?

1 个答案:

答案 0 :(得分:0)

虽然在SQL中存在事务级别,但似乎存在嵌套事务,但事实并非如此 - 至少不是你认为的那样(我知道,有类似的问题需要解决)。 /强>

实验:您可以尝试在SQL查询窗口中调用多个begin tran,询问事务级别和事务ID。级别会增加,但在每次交易中,您都会获得最外层交易的ID,因此使用最外层交易(所以TransactionScope.Requires新选项在那里不是很大帮助)。

可能的解决方案:您希望实现的目标是可能的,但不完全是这样:您可以在内部范围内绕过事务(但必须坚持原子过程)。如果这不适用,您必须重新考虑您的工作以及是否可以在没有这种复杂性的情况下解决它......

阅读有关事务嵌套的更多信息,在Oracle和SQL上的行为不同。