我使用EF 6 Database.SqlQuery语句来执行存储过程,并执行已实现的错误和事务处理、打开和关闭事务(如果只有一个记录回滚出现错误,则处理多个记录,并提交没有错误完成的任何其他内容)。
List<T> _result = this.Database.SqlQuery<T>(sqlStatement, parameters).ToList();EF使用自己的事务来执行Database.SqlQuery,但是当发生错误时,我会回滚到存储过程中,此回滚也适用于execution。所以我得到了一个例外:
System.Data.SqlClient.SqlException (0x80131904):当前事务无法提交,也不能支持写入日志文件的操作。回退交易。
在这种情况下,我如何防止EF使用他自己的事务,或者阻止EF的事务处理?
发布于 2014-09-16 08:03:54
在本例中,我发现没有.SqlQuery命令添加的附加事务,但是这个错误是由执行过程引入到inital执行的存储过程中产生的(虽然有点复杂,但它确实是必需的)。但是,我在使用EntityFramework的外部.ObjectContext.ExecuteStoreCommand事务中遇到了这个问题,但是我使用TransactionalBehavior.DoNotEnsureTransaction行为解决了这个问题。
例如:
using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
{
result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
}https://stackoverflow.com/questions/25606994
复制相似问题