gpt4 book ai didi

sql-server - EF6 将每个存储过程调用包装在其自己的事务中。如何防止这种情况发生?

转载 作者:行者123 更新时间:2023-12-01 19:31:57 25 4
gpt4 key购买 nike

使用 SQL Server Profiler 进行分析:EF 6 使用 BEGIN TRANCOMMIT 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/

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