使用 SQL Server Profiler 进行分析:EF 6 使用 BEGIN TRAN
和 COMMIT TRAN
包装每个存储过程调用。
这不是一个重大改变吗?
也许这不仅是一个重大更改,而且使 SP 中的任何事务逻辑都不可能实现,因为我们永远无法使用 ROLLBACK TRAN
回滚存储过程中的事务(注意:SQL Server 中没有嵌套事务),因此一次回滚会回滚到 @@TRANCOUNT
零。当我们处于事务中时,因为 EF 6,我们得到“EXECUTE 后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 0。”标准 SQL Server 错误。
请不要问我为什么要调用存储过程。我有数百个,所有这些都使用 TRY ... COMMIT ... CATCH ROLLBACK
逻辑。
有什么想法可以阻止 EF 6 执行此操作吗?
最佳答案
存在 ExecuteSqlCommand
方法的重载,可防止此行为:
db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
关于sql-server - EF6 将每个存储过程调用包装在其自己的事务中。如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991609/