首页 > 其他 > 详细

坑到了,EF执行带事物的存储过程

时间:2016-09-01 00:02:26      阅读:296      评论:0      收藏:0      [点我收藏+]

用EF开发项目,今天调用 带事物 存储过程,始终报错,
"EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。\r\nEXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。"。

执行代码如下:

1 public async Task<int> ExecCommandAsync(string functionName, object[] param)
2 {
3    return await DbContext.Database.ExecuteSqlCommandAsync( functionName, param);
4 }

 

在Sql本地执行是不没问题的,但是代码执行就会报错,而且数据是插表成功的。存储过程改了很多也没用。后台,只能反编译EntityFramework.dll,在方法ExecuteSqlCommandAsync():技术分享

红框的意思,大家都看得懂吧,在初始化时EnsureTransactionsForFunctionsAndCommands (官方:此标志确定在事务外部执行方法(如 ExecuteSqlCommand(String, Object[]))时是否将启动新事务。 请注意,这不更改 SaveChanges() 的行为。默认True

所以会启动新事物。导致数据操作成功,代码返回失败。改成:

1  public async Task<int> ExecCommandAsync(string functionName, object[] param)
2  {
3     return await DbContext.Database.ExecuteSqlCommandAsync(TransactionalBehavior.DoNotEnsureTransaction, functionName, param);
4  }

问题成功解决。

坑到了,EF执行带事物的存储过程

原文:http://www.cnblogs.com/lenchen/p/5827736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!