博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF TransactionScope异常:分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。
阅读量:4287 次
发布时间:2019-05-27

本文共 1552 字,大约阅读时间需要 5 分钟。

一、说明

在EF中如果使用多个上线文访问数据库,那么事务通常使用TransactionScope。

在多线程使用TransactionScope的时候会抛出异常:

分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。

解决方案:

方案一,使用线程锁,确保事务执行代码,同一时间仅有一个线程执行

方案二、封装处理TransactionScope,同一个事务实例,只能被同一个线程使用,其他的使用者等待,代码如下:

/// /// 自定义事务处理,/// 此版本,数据库上下文会出现多个,所以事务使用 TransactionScope /// 使用排它锁,确保事务的单线程执行/// public class EFTransaction : IDisposable{    private readonly static object _MyLock = new object();    ///     /// 当前事务对象    ///     private TransactionScope tran = null;    public EFTransaction()    {        Monitor.Enter(_MyLock);//获取排它锁        this.tran = new TransactionScope();    }    ///     /// 提交    ///     public void Commit()    {        tran.Complete();    }    ///     /// 混滚操作,在Dispose(),中自动调用回滚    ///     public void Rollback()    {        //提前执行释放,回滚        if (tran != null)            tran.Dispose();    }    public void Dispose()    {        if (tran != null)            tran.Dispose();        Monitor.Exit(_MyLock);//释放排它锁    }}

使用示例:

using (var tran = new EFTransaction())            {                //修改名称                name = ">>ModuleOperate:" + name;                UpdateFirstName(name);                //2.修改菜单                MenuOperate _menu = new MenuOperate();                _menu.UpdateFirstName(name);                //提交事务                tran.Commit();            }

关于本异常,更多参考:

参考一:

分布式事务已完成。请将此会话登记到新事务或NULL事务中。

Sql Server 2008/2012

错误原因:
将分布式事务处理协调器与SQLServer配合使用的编程模型需要应用程序显式登记到分布式事务或从中脱离出来。
解决方案:
应用程序登记到分布式事务中之后,应用程序必须显式地从分布式事务中脱离或登记到另一个分布式事务中。这样将从上一个登记的事务中隐式脱离。有关从分布式事务脱离或登记到其中的准确语法,请参见该应用程序的编程接口手册。
参考二:

更多相关文章:

转载地址:http://dnogi.baihongyu.com/

你可能感兴趣的文章
【教你修复win7下IE8主页被篡改的方法】
查看>>
【维护和保养电脑主机需12点注意】
查看>>
【幸福小助手V3.1绿色版】生活提醒软件
查看>>
【C#如何判断字符串是否为空串】
查看>>
【Linux编译安装httpsqs】
查看>>
【用C#实现启动另一程序的方法】
查看>>
【Android读写文件方法汇总】
查看>>
网线接法大全(RJ45型网线插头)
查看>>
【WinXP自我修复故障功能详解】
查看>>
【23招实用技巧让XP运行更快捷更可靠】
查看>>
【Wn8中如何关闭或开启自动播放功能】
查看>>
【Win7上装双系统完美体验Windows8】
查看>>
【解决Win7缩略图预览功能无法使用问题】
查看>>
【关闭Win7系统自动安装驱动程序功能】
查看>>
【iPod转换精灵V10.2 官方最新版】强大的视频转换功能
查看>>
【Windows编程的25个知识点】
查看>>
【Windows8完美解决强制要求驱动签名】
查看>>
2020年Java面试题总结(一)
查看>>
Java技术面试基本面试题(高频)
查看>>
数据库常见面试题
查看>>