EF to MySql一般都是用using最后Commit,一直以为最后没Commit,当using调用Dispose会自动Rollback,没想到这儿有个坑,mysql有个bug并不会Rollback,事务也不会关闭,所以再次BeginTransaction就会报An error occurred while starting a transaction on the provider connection. See the inner exception for details.错误详情是Nested transactions are not supported.

所以用 EF to MySql一定要记得try catch  Rollback

例子如下

            using (var db = new OtoRCEntities())
{
using (var tran = db.Database.BeginTransaction())
{
try
{
db.Database.ExecuteSqlCommand("update xxx");
tran.Commit();
}
catch (Exception)//这儿try catch 是用来报错了没有Commit,按理说using后应该自动Rollback
{ } }
}
using (var db = new OtoRCEntities())
{
using (var tran = db.Database.BeginTransaction())//到这儿就会报错
{
try
{
db.Database.ExecuteSqlCommand("update xxx");
tran.Commit();
}
catch (Exception)
{ } }
}

 

  具体MySql bug地址: http://bugs.mysql.com/bug.php?id=71502

MySql EF事务using不会自动 Rollback的bug的更多相关文章

  1. mysql的事务和select...for update

    一.mysql的事务mysql的事务有两种方式:1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMI ...

  2. MySQL的事务

    MySQL的事务 1.事务:事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行. 2.事务具备的四个特性(简称为ACID性): (1)原子性(Atomic ...

  3. mysql 存储过程 事务; mysql的事务中包含一个存储过程

    在asp.net结合mysql的开发中,我平时用到的事务处理是 使用 TransactionOptions  来进行处理 TransactionOptions transactionOption = ...

  4. MySQL数据库事务剖析

    MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...

  5. 理解MySQL数据库事务

    1. 什么是事务处理? 事务处理是一种机制,它是用来管理必须成批执行的mysql操作.来保证数据库不完整的操作结果. 2. 为什么要使用事务处理? 在使用mysql操作数据的过程中,如果只是简单的中小 ...

  6. 《高性能Mysql》解读---Mysql的事务和多版本并发

    1.base:ACID属性,并发控制 2.MySql事务的隔离级别有哪些,含义是什么? 3.锁知多少,读锁,写锁,排他锁,共享锁,间隙锁,乐观锁,悲观锁. 4.Mysql的事务与锁有什么关联?MySq ...

  7. mysql之事务管理

    本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不 ...

  8. MySql数据库事务正常提交,回滚失败

    问题:在初次练习Mysql数据库事务时,事务正常提交,但是在遇到异常应当回滚时,回滚失败. 代码如下: //2.更新操作. public void update(Connection conn, St ...

  9. MySQL 基础 事务

    什么是mysql的事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.简单的说,事务就是一连串的DML的sql语句组合在一起,所以语句执行成功才算成功,如果有语句执行失败,执行就不成功 .比如 ...

随机推荐

  1. Ubuntu下可以直接安装mingw(sudo apt-get install mingw32 mingw32-binutils mingw32-runtime,附例子,简单好用,亲测成功)good

    Mingw:在Linux系统下编译Windows的程序 Ubuntu下可以直接安装:sudo apt-get install mingw32 mingw32-binutils mingw32-runt ...

  2. React学习(3)——ref,key,PureComponent,bindActionCreator

    ref 如果在html里设置ref那么它就指向这个真实的DOM节点. 如果在组件里设置ref,那么它就指向这个组件实例的引用,和组件里面的this互等. 我们经常在表单input,select里使用, ...

  3. bigdata_zookeeper 可视化界面zkui

    安装zkui zookeeper节点的可视化界面有很多种,我使用的是zkui,比较直观,而且可以导入文件,他的Git地址:                     https://github.com ...

  4. gcc/g++编译(生动形象,从最容易入手的hello world解释了库的概念)

    1. gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理,生成.i的文件[预处理器cpp] (2).将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] (3).有汇编变为目 ...

  5. sql执行分页查询

    declare  @PageSize int,@PageIndex int;set @PageSize=5;set @PageIndex=2;WITH Pagination AS(  SELECT * ...

  6. duilib菜单开发遇见“0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突”

    我的程序是这样一个逻辑. 首先创建用户列表,点击列表项弹出菜单,点击菜单上“设备选项”,弹出设备列表,上面显示这个用户拥有的设备. 菜单的创建参考了这为博主的教程:http://www.cnblogs ...

  7. volatile变量理解 via《Java并发编程实战》

    第3章:对象的共享 volatile关键字的理解 volatile变量,用来确保将变量的更行操作通知到其他线程.当变量申明为volatile类型后,编译器与运行时都会注意带这个变量时共享的,因此不会将 ...

  8. MySql如何将一个表字段更新到另一个表字段

    今天遇到这样一个需求: 有两张表,一张是专辑表,另一张是专辑下的图片表, 专辑表中有拍摄年\月,两个字段; 图片表中有实际拍摄日期的字段; 因为专辑表中这两个字段是后加入的,因此只能用一条sql语句将 ...

  9. SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原

    原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DECLARE @ ...

  10. 简单的Windows Webcam应用:Barcode Reader

    原文:简单的Windows Webcam应用:Barcode Reader 在Windows上用WinForm创建一个Webcam应用需要用到DirectShow.DirectShow没有提供C#的接 ...