【问题标题】:Isolated ADO.NET connection and transaction within a transactionscope事务范围内的隔离 ADO.NET 连接和事务
【发布时间】:2010-09-24 19:44:22
【问题描述】:

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

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

【问题讨论】:

    标签: ado.net transactions transactionscope


    【解决方案1】:

    你传入TransactionScopeOption.RequiresNew

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

    不过要小心,那座桥下有龙。具体来说,如果包含范围有来自其自己的事务范围的未提交的未提交写入,并且您尝试在内部独立事务(新范围)中触及完全相同的实体,则很容易与您自己发生死锁。

    【讨论】:

    • 我将使用 ReadUncommitted;并且仅将其用于性能关键的读取操作(基本上是为了执行不虔诚、复杂的导出)——所以我认为在这个特定实例中它不会成为问题,对吧?
    猜你喜欢
    • 2010-11-05
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多