有可能有一个事务作用域的层次结构吗?
如果外部事务作用域进行了dispose,那么内部事务作用域中所做的更改会发生什么?
我的特殊问题是,我的测试代码运行具有事务作用域的代码。当我调用具有事务作用域的第二组代码时,我得到"Cannot access a disposed Object.Transaction“。是否内部事务作用域的处置也在处置外部事务作用域。
发布于 2009-08-26 12:53:12
我怀疑这是正在发生的事情。如果需要,只要底层技术支持分布式事务,就可以嵌套TransactionScopes。例如,如果您启动一个事务并更新数据库A中的一些数据,然后调用一个函数,并且在该函数内部创建一个新的TransactionScope并将一些数据插入到数据库B中,那么内部事务将使用已经打开的“环境”事务。但是,要使其正常工作,您需要运行分布式事务处理协调器(对于SQL Server)。此外,SQL Server 2005和更高版本能够将事务作为常规事务启动,并在需要时将其升级为分布式事务,而SQL 2000将把所有这些事务都作为分布式事务启动,因为它不能升级它们。
当您有嵌套的事务时,整个事务直到最外层的事务被提交时才会提交。
这是some more info。
看看TransactionScopeOption;它决定了嵌套事务如何与外部事务交互。
发布于 2009-08-26 12:54:09
当外部事务失败时,我们将回滚所有内部事务。如果您提交和内部,并处理外部,内部仍然回滚。事实上,内部不会提交,除非外部通过提交来允许它。
你在提交外部的那个,不是吗?有关这方面的一篇好论文,请参阅here。
发布于 2009-10-11 13:17:22
是的,可以有一个事务作用域的层次结构。This blog post解释了它们是如何工作的,特别是内部事务作用域应该如何实例化以及事务如何完成和提交。
记住事务和事务作用域之间的区别是很重要的--默认情况下(即在不考虑TransactionScopeOption的情况下),即使是嵌套事务作用域,也只能使用单个事务。
有关"disposed“错误消息,请参阅this question。
https://stackoverflow.com/questions/1334366
复制相似问题