Igo*_*r N 5 c# sql-server entity-framework transactions
我正在使用 EF 6 Database.SqlQuery 语句来执行存储过程,该存储过程已实现错误和事务处理,并打开和关闭事务(处理多个记录,如果一条记录出现错误,则仅回滚此记录,并提交其他已完成且没有错误的内容) )。
List<T> _result = this.Database.SqlQuery<T>(sqlStatement, parameters).ToList();
Run Code Online (Sandbox Code Playgroud)
EF 使用自己的事务来执行 Database.SqlQuery,但是当发生错误并且我回滚到存储过程时,此回滚也适用于 EF 事务。所以我得到以下异常:
System.Data.SqlClient.SqlException (0x80131904): 当前事务无法提交,并且无法支持写入日志文件的操作。回滚事务。
在这种情况下,我如何防止 EF 使用他自己的事务,或者阻止程序关闭 EF 的事务?
我发现在这种情况下,.SqlQuery 命令没有添加额外的事务,但错误是由执行的过程到初始执行的存储过程中产生的(是的有点复杂,但确实是必需的)。但是,我在使用 .ObjectContext.ExecuteStoreCommand 进行外部 EntityFramework 事务时遇到了这个问题,但我使用 TransactionalBehavior.DoNotEnsureTransaction 行为解决了这个问题。
例如:
using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
{
result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1817 次 |
| 最近记录: |