首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF Database.SqlQuery内部回滚到已执行的存储过程

EF Database.SqlQuery内部回滚到已执行的存储过程
EN

Stack Overflow用户
提问于 2014-09-01 13:32:24
回答 1查看 1.8K关注 0票数 5

我使用EF 6 Database.SqlQuery语句来执行存储过程,并执行已实现的错误和事务处理、打开和关闭事务(如果只有一个记录回滚出现错误,则处理多个记录,并提交没有错误完成的任何其他内容)。

代码语言:javascript
复制
List<T> _result = this.Database.SqlQuery<T>(sqlStatement, parameters).ToList();

EF使用自己的事务来执行Database.SqlQuery,但是当发生错误时,我会回滚到存储过程中,此回滚也适用于execution。所以我得到了一个例外:

System.Data.SqlClient.SqlException (0x80131904):当前事务无法提交,也不能支持写入日志文件的操作。回退交易。

在这种情况下,我如何防止EF使用他自己的事务,或者阻止EF的事务处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-16 08:03:54

在本例中,我发现没有.SqlQuery命令添加的附加事务,但是这个错误是由执行过程引入到inital执行的存储过程中产生的(虽然有点复杂,但它确实是必需的)。但是,我在使用EntityFramework的外部.ObjectContext.ExecuteStoreCommand事务中遇到了这个问题,但是我使用TransactionalBehavior.DoNotEnsureTransaction行为解决了这个问题。

例如:

代码语言:javascript
复制
        using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
        {
            result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25606994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档