关于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代码块后进行处理

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

你可能感兴趣的:(.net相关理论及应用)