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

//对于锁推荐使用静态私有静态变量
private readonly static object _MyLock = new object();
/// <summary>
/// 事务, 多表修改
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool UpdateName(string name)
{
lock (_MyLock)
{
using (var tran = new TransactionScope())
{
ModuleOperate _module = new ModuleOperate();
.修改模块名称
_module.UpdateFirstName("模块:" + name);
.修改菜单
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类定义:

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

EF 多线程TransactionScope事务异常"事务EFTransaction类定义:与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。"的更多相关文章

  1. SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。

    ### The error occurred while setting parameters### SQL: update ERP_SCjh_zzc_pl set IF_TONGBU=1 where ...

  2. C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别

    C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye    { //私有的构造函数,保证外部不能实例化        private  ...

  3. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。

    访问频率比较高的app接口,在后台写的异常日志会偶尔出现以下错误. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 实所有的死锁最深层的原因就是一个 ...

  4. 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务

    前言:         由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用“事务发布”模式实现主数据库和只读数据库的同步,其中: 发布服务器1 ...

  5. 并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品

    这个是并发情况下导致的数据库事务错误,先介绍下背景. 背景 springboot+springmvc+sqlserver+mybatis 一个controller里有五六个接口,这些接口都用到了spr ...

  6. Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)

    1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...

  7. 小记:事务(进程 ID 56)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。

    今天在做SQL并发UPDATE时遇到一个异常:(代码如下) //Parallel 类可产生并发操作(即多线程) Parallel.ForEach(topics, topic => { //DBH ...

  8. 事务 ( 进程 ID 60) 与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品

    Select * FROM [TableName] With(NoLock) .....

  9. 关于C++类定义中不能声明该类对象,而Java中可以的原因

    相信接触过C++的人,在学习Java的过程当中,会遇到这样一个问题:在Java中常常会在类定义中声明一个该类的对象(例如Person类定义中声明一些叫parents之类的Person对象),但是在C+ ...

随机推荐

  1. Cognos两种建模工具对于复杂日期维度的处理比较(下)

    本文继Cognos两种建模工具对于复杂日期维度的处理比较(上)之后将介绍一下Cognos中建模工具Transform对复杂日期维度的处理. 二:Transform建模对于复杂日期维度的处理 为了书写效 ...

  2. mongo文本搜索的一个例子

      假如有一个名为articles的集合,数据如下: { "_id" : 1, "title" : "cakes and ale" } { ...

  3. Mac 苹果OS X小技巧:如何更改文件的默认打开方式

    OS X小技巧:如何更改文件的默认打开方式 1.command + i 打开简介 2.选择合适的软件打开方式 3.选择全部更改 如图: 转自:http://digi.tech.qq.com/a/201 ...

  4. [Node.js]32. Level 7: Working with Lists -- Redis

    As we saw in the video, redis can do more than just simple key-value pairs. We are going to be using ...

  5. Pinger2

    import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;import j ...

  6. redis学习笔记——主从同步(复制)

    在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复 ...

  7. 知识共享图文直播---(一)将数据库中的数据加载到MSFlexGrid空间中再导入Excel

    熟话说万物皆有其存在的道理,为什么我突然想写<知识共享图文直播>这个系列呢?首先,我想的是记录自己学习的历程,在记录中加深自己对知识的理解,同时也希望自己的博文能帮助到其他数据库的初学者. ...

  8. JPA中的一对多双向关联与级联操作

    学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...

  9. PHP採集利器:依据開始字符串和结束字符串截取须要的採集内容数据

    PHP採集利器:依据開始字符串和结束字符串截取须要的採集内容数据 function strCutByStr(&$str, $findStart, $findEnd = false, $enco ...

  10. 新安装的MySQL的简单配置

    修改配置文件 bind-address = 10.6.20.1 port = 3306 character_set_server = utf8 max_connect_errors = 1000000 ...