gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:59:26 35 4
gpt4 key购买 nike

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

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

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

System.Data.SqlClient.SqlException (0x80131904): The current transaction cannot be committed and cannot support operations that write to the log file. Roll back the transaction.

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

最佳答案

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

例如:

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

关于c# - EF ef Database.SqlQuery 内部回滚到已执行的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25606994/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com