关于mysql中EF和事务的结合

先交代一下背景,我是要做一个同步数据程序,从248数据库中同步数据到241数据库中,248是用的EF,241是用MySqlCommand执行操作,现在需要用到事务处理一些操作,需要把两个操作结合起来,刚开始以为直接把MySqlCommand执行方法放到事务中就可以了,后来报错了,Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported,大概意思是当前不支持多个并发连接或同一事务中具有不同连接字符串的连接

经过多次测试发现是由于在打开EF连接的同时又去打开事务的连接导致出错

出错代码如下:

public static void UpdateAffairsInfo()
{

using (TransactionScope trans = new TransactionScope())
 { 
 dbEntities dbbase = new dbEntities();

affairs affairsInfo = dbbase.affairs.Where(a => a.SS_DIREITEM_INFO_ID == info.pid).FirstOrDefault();

MySqlHelper.ExcuteSQL(Sql1);

MySqlHelper.ExcuteSQL(Sql2);

trans.Complete();

}

}

正确代码如下:

public static void UpdateAffairsInfo()
{
 dbEntities dbbase = new dbEntities();

affairs affairsInfo = dbbase.affairs.Where(a => a.SS_DIREITEM_INFO_ID == info.pid).FirstOrDefault();

using (TransactionScope trans = new TransactionScope())
 { 

MySqlHelper.ExcuteSQL(Sql1);

MySqlHelper.ExcuteSQL(Sql2);

trans.Complete();

}

}

把EF需要查询的数据提前查出来,然后再建事务的数据库连接就不会出现那个并发连接错误了,如果还想对EF中的数据进行处理,可以等执行完trans.Complete()或者using代码块后进行处理

方法仅供参考,不确定是否适用于其他情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值