我正在使用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的交易?
答案 0 :(得分:0)
我发现在这种情况下,没有.sqlQuery命令添加的附加事务,但是错误是由执行过程产生的初始执行存储过程(有点复杂,但实际上是必需的)。但是,我使用.ObjectContext.ExecuteStoreCommand与外部EntityFramework事务有这个问题,但我使用TransactionalBehavior.DoNotEnsureTransaction行为解决了这个问题。
例如:
using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
{
result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
}