博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF 多线程TransactionScope事务异常"事务EFTransaction类定义:与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。"...
阅读量:5142 次
发布时间:2019-06-13

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

解决方案代码一:使用lock锁定

//对于锁推荐使用静态私有静态变量  private readonly static object _MyLock = new object();  ///   /// 事务, 多表修改  ///   ///   /// 
public bool UpdateName(string name) { lock (_MyLock) { using (var tran = new TransactionScope()) { ModuleOperate _module = new ModuleOperate(); 1.修改模块名称 _module.UpdateFirstName("模块:" + name); 2.修改菜单 this.UpdateFirstName("菜单:" + name); 提交事务 tran.Complete(); } } return true; }

解决方案代码二:使用Monitor封装TransactionScope

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

 

 EFTransaction类定义:

///   /// 自定义事务处理,  /// 此版本,数据库上下文会出现多个,所以事务使用 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);//释放排它锁      }  }

 

原文:http://blog.csdn.net/u011127019/article/details/54576873

转载于:https://www.cnblogs.com/shy1766IT/p/8195009.html

你可能感兴趣的文章
js内置对象
查看>>
wpf datagrid performance
查看>>
总结Content Provider的使用
查看>>
hdu-5112-A Curious Matt
查看>>
SCII码表 键盘常用ASCII码
查看>>
Asp.Net Core 自定义设置Http缓存处理
查看>>
深入浅出SharePoint—使用回收站
查看>>
li设置多选和取消选择的样式、输入数据类型判断
查看>>
Hive数据仓库与数据库的异同
查看>>
《诗词大闯关》问卷调查心得与体会
查看>>
JSON.stringify语法
查看>>
HTML如何让文本两端对齐
查看>>
大内高手—惯用手法
查看>>
解决华为手机不打印Log信息的问题
查看>>
linux下安装tomcat
查看>>
Nginx 在各种语言框架下的配置 - 以 codeigniter 为例
查看>>
Nagios+msn+fetion自定义时间发送报警消息
查看>>
python基本数据结构栈stack和队列queue
查看>>
sql面试题
查看>>
这几天头很大呀,因为在做毕设实物。。。
查看>>