代码之家  ›  专栏  ›  技术社区  ›  Shiraz Bhaiji

TransactionScope的层次结构

  •  3
  • Shiraz Bhaiji  · 技术社区  · 15 年前

    是否可以具有事务范围的层次结构?

    如果外部事务范围进行了释放,则内部事务范围中所做的更改将发生什么变化?

    我的特殊问题是,我有运行具有事务范围的代码的测试代码。当我调用具有事务作用域的第二组代码时,“无法访问已释放的对象。“交易”。是否内部事务范围的释放也在释放外部事务范围。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Scott Whitlock    15 年前

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

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

    这里是 some more info .

    看一下TransactionScopeOption;它确定嵌套事务如何与外部事务交互。

        2
  •  2
  •   Preet Sangha    15 年前

    当外部事务失败时,所有内部事务都将回滚。如果你承诺和内部的,并处置外部,内部仍然会回滚。事实上,内部不会提交,除非外部通过提交允许提交。

    你是在承担外部任务,不是吗?见 here 关于这个的好论文。

        3
  •  1
  •   Community CDub    7 年前

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

    重要的是要记住 交易 交易 作用域 -默认情况下(即 TransactionScopeOption )即使嵌套了事务范围,也只能使用单个事务。

    关于“已释放”错误消息,请参阅 this question .