博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
坑到了,EF执行带事物的存储过程
阅读量:5898 次
发布时间:2019-06-19

本文共 878 字,大约阅读时间需要 2 分钟。

用EF开发项目,今天调用 带事物 存储过程,始终报错,

"EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。\r\nEXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。"。

执行代码如下:

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

 

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

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

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

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

问题成功解决。

转载于:https://www.cnblogs.com/lenchen/p/5827736.html

你可能感兴趣的文章
奥运主题游戏《阿翔 跨栏》已经发布成功
查看>>
bzoj 1070: [SCOI2007]修车
查看>>
搭建yum源服务器
查看>>
delphi使用ado导出excel
查看>>
分布式开放消息系统(RocketMQ)的原理与实践
查看>>
HashMap实现特点——基于JDK文档
查看>>
hdu5739Fantasia(多校第二场1006) 割点+逆元
查看>>
linux 命令详解 二十三
查看>>
escalation 限制Nagios报警次数
查看>>
IT职场人生系列之二:大学生活
查看>>
4.一对多关联映射
查看>>
十种贵人,四种朋友,遇到千万别放手!!
查看>>
Gitlab 6.3.1默认仓库路径修改
查看>>
F5大幅增强SDN集成和云扩展功能
查看>>
应用:Lync改变状态
查看>>
php分页
查看>>
10.25日模拟试题
查看>>
洛谷——P1330 封锁阳光大学
查看>>
php-fpm的max_chindren的一些误区
查看>>
libtool: install: error: cannot install `libaprutil-1.la' to a directory
查看>>