代码之家  ›  专栏  ›  技术社区  ›  DanP

TransactionScope中的独立ADO.NET连接和事务

  •  0
  • DanP  · 技术社区  · 14 年前

    背景:我有一个ASP.NET MVC应用程序,它使用操作筛选器将控制器操作包装在TransactionScope中。

    下游(在我的基础结构层中);我想打开一个新的ADO.NET连接(与外部TransactionScope连接到同一个数据库,如果这是相关的),并让它参与自己的事务-而不与在控制器级别启动的当前TransactionScope绑定;如何o我打算这么做?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Remus Rusanu    14 年前

    你进去了 TransactionScopeOption.RequiresNew :

    TransactionOptions to = new TransactionOptions;
    to.IsolationLevel = <desiredIsolationLevel>;
    using (TransactionScope scope = new TransactionScope(
       TransactionScopeOption.RequiresNew, to))
    {
      ... do work here
      scope.Complete ();
    }
    

    不过要小心,那座桥下有龙。特别是,如果包含作用域有来自其自身事务作用域的挂起的未提交写入,并且您试图接触内部独立事务(新作用域)中非常相同的实体,则很容易与您自己死锁。