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

时间:2014-09-01 13:32:24

标签: c# sql-server entity-framework transactions

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

List<T> _result = this.Database.SqlQuery<T>(sqlStatement, parameters).ToList();

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

  

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

在这种情况下,如何阻止EF使用自己的交易,或阻止程序关闭EF的交易?

1 个答案:

答案 0 :(得分:0)

我发现在这种情况下,没有.sqlQuery命令添加的附加事务,但是错误是由执行过程产生的初始执行存储过程(有点复杂,但实际上是必需的)。但是,我使用.ObjectContext.ExecuteStoreCommand与外部EntityFramework事务有这个问题,但我使用TransactionalBehavior.DoNotEnsureTransaction行为解决了这个问题。

例如:

        using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
        {
            result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
        }
相关问题