2014-01-16 32 views
3

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

+0

“我想要的是有一个内部作用域可以在不停止外部作用域的情况下失败”然后外部作用域不是一个事务。 – dursk

+0

@mattm好吧,使用事务范围是没有办法检测错误,回滚最后几个操作(即一个innerscope),然后继续处理? 如果我摆脱了外部范围,那么基本上我有一堆孤立的TransactionScopes,一次执行一个。如果我确定需要的话,有什么办法可以回滚所有成功的吗? – ForeverNoobie

+1

检出:http://msdn.microsoft.com/en-us/library/ms172152%28v=vs.90%29.aspx#Y1642和http://stackoverflow.com/questions/2741988/nested-child -transactionscope-rollback – dursk

回答

0

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

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

可能的解决方案:您想要实现的是可能的,但不完全如此:您可以绕过内部作用域的事务(但必须坚持原子进程)。如果这不适用,您必须重新考虑您所做的事情以及您是否可以在没有这种复杂性的情况下解决它...

了解更多关于事务嵌套的信息,它在Oracle和SQL上表现不同。

相关问题