是否可以有交易范围的层次结构?
如果外部事务范围进行了 dispose,那么内部事务范围中所做的更改会发生什么?
我的特殊问题是我有运行具有事务范围的代码的测试代码。当我调用具有事务范围的第二组代码时,我得到“无法访问已处置的对象。事务”。可能是内部事务范围的处置也处置外部事务范围。
是否可以有交易范围的层次结构?
如果外部事务范围进行了 dispose,那么内部事务范围中所做的更改会发生什么?
我的特殊问题是我有运行具有事务范围的代码的测试代码。当我调用具有事务范围的第二组代码时,我得到“无法访问已处置的对象。事务”。可能是内部事务范围的处置也处置外部事务范围。
我怀疑这是正在发生的事情。如有必要,只要底层技术支持分布式事务,TransactionScopes 就可以嵌套。例如,如果您启动一个事务并更新数据库 A 中的一些数据,然后调用一个函数,在该函数内部,您创建一个新的 TransactionScope 并将一些数据插入数据库 B,然后内部事务使用“环境”已经打开的交易。但是,要使其工作,您需要运行分布式事务协调器(对于 SQL Server)。此外,SQL Server 2005 及更高版本能够将事务作为常规事务启动,并在需要时将其提升为分布式事务,而 SQL 2000 将所有这些作为分布式事务启动,因为它没有能力推广他们。
当您有嵌套事务时,整个事务在提交最外层事务之前不会提交。
这里有更多信息。
看看TransactionScopeOption;这决定了嵌套事务如何与外部事务交互。
当外部事务失败时,我们将回滚所有内部事务。如果您提交和内部一个,并处置外部,内部仍然回滚。事实上,除非外部允许它通过提交,否则内部不会提交。
你是在犯外在的,不是吗?请参阅此处以获取有关此内容的好论文。