3

是否可以有交易范围的层次结构?

如果外部事务范围进行了 dispose,那么内部事务范围中所做的更改会发生什么?

我的特殊问题是我有运行具有事务范围的代码的测试代码。当我调用具有事务范围的第二组代码时,我得到“无法访问已处置的对象。事务”。可能是内部事务范围的处置也处置外部事务范围。

4

3 回答 3

3

我怀疑这是正在发生的事情。如有必要,只要底层技术支持分布式事务,TransactionScopes 就可以嵌套。例如,如果您启动一个事务并更新数据库 A 中的一些数据,然后调用一个函数,在该函数内部,您创建一个新的 TransactionScope 并将一些数据插入数据库 B,然后内部事务使用“环境”已经打开的交易。但是,要使其工作,您需要运行分布式事务协调器(对于 SQL Server)。此外,SQL Server 2005 及更高版本能够将事务作为常规事务启动,并在需要时将其提升为分布式事务,而 SQL 2000 将所有这些作为分布式事务启动,因为它没有能力推广他们。

当您有嵌套事务时,整个事务在提交最外层事务之前不会提交。

这里有更多信息

看看TransactionScopeOption;这决定了嵌套事务如何与外部事务交互。

于 2009-08-26T12:53:12.077 回答
2

当外部事务失败时,我们将回滚所有内部事务。如果您提交和内部一个,并处置外部,内部仍然回滚。事实上,除非外部允许它通过提交,否则内部不会提交。

你是在犯外在的,不是吗?请参阅此处以获取有关此内容的好论文。

于 2009-08-26T12:54:08.613 回答
1

是的,可以有事务范围的层次结构。这篇博文解释了它们是如何工作的,特别是应该如何实例化内部事务范围以及事务如何完成和提交。

记住事务和事务范围之间的区别很重要——默认情况下(即在没有 的情况下TransactionScopeOption)即使嵌套事务范围,您也只会使用单个事务。

关于“已处置”错误消息,请参阅此问题

于 2009-10-11T13:17:21.723 回答