EF框架 多表保存

EF的SaveChanges确实有事务功能,这个3楼的链接里面有:
"In all versions of Entity Framework, whenever you execute SaveChanges() to insert, update or delete on the database the framework will wrap that operation in a transaction. This transaction lasts only long enough to execute the operation and then completes. When you execute another such operation a new transaction is started."

不过事务肯定也需要底层的ado.net provider的支持,LZ的问题是mysql的provider里面报出来的错误。这个能搜到一些同样的问题,貌似是EF的事务方式和mysql的.net connector还不太兼容,mysql上有这个bug的报告,解决方案是使用TransactionScope,不过我没试过。

 

今天才发现问题的根本所在。其实这里与事务相关的代码是没有多大错误的,导致事务无效的根本原因是当前的Mysql数据库引擎根本就不支持事务!!!查看你需要用到事务的表的引擎类型:
SHOW TABLE STATUS FROM DB_name WHERE NAME='table_name'; 
 如果结果中Engine列的值不是“InnoDB”的话,那么你在代码中不管怎样写相关事务代码都是起不到作用的!需要将该表的引擎修改成InnoDB事务才会有效,修改语句:
ALTER TABLE engineTest ENGINE = INNODB
希望对以后看到的人有帮助

 

http://bbs.csdn.net/topics/390982230

posted on 2016-07-12 17:52  fjc  阅读(548)  评论(0编辑  收藏  举报

导航