entity-framework - 仅 EntityFramework 中的事务不匹配

标签 entity-framework transactions

我有一个存储过程

CREATE PROCEDURE [dbo].[GetNextImageRequest]
(...) AS

DECLARE @ReturnValue BIT
SET @ReturnValue = 1

-- Set paranoid level isolation: only one access at a time!
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 
BEGIN TRANSACTION

BEGIN TRY 
    ...
    UPDATE STATEMENT THAT THROWS FOREIGN KEY EXCEPTION           

    IF @@trancount > 0
    BEGIN
        COMMIT TRANSACTION
    END
    SET @ReturnValue = 0
END TRY

BEGIN CATCH
    IF @@trancount > 0
    BEGIN
        ROLLBACK TRANSACTION
    END
    SET @ReturnValue = 1
END CATCH 

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET NOCOUNT ON

RETURN @ReturnValue   -- 0=success

GO

当我从 Sql Server Management studio 手动调用它时,我没有得到任何异常。 当我通过 Entity Framework 6 调用它时,我得到

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.

我做错了什么?外键约束正在回滚,但我正在检查@@TRANCOUNT。

最佳答案

Entity Framework 6 (EF6) 在 ExecuteSqlCommand 之前添加这一行

db.Configuration.EnsureTransactionsForFunctionsAndCommands = false;

关于entity-framework - 仅 EntityFramework 中的事务不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500617/

相关文章:

java - 多个事务管理器 - 在运行时选择一个 - Spring

c# - 将谓词中的 Guid 与 MySql.Data.Entity 进行比较时,序列不包含任何元素

jakarta-ee - JavaEE - EJB 3.1 : Can we force transaction rollback on checked exceptions?

tsql - 关于一系列合并进度的状态报告

c# - 使用实体检索 SQL View

multithreading - Hibernate的线程问题

spring - 执行 spring 事务时出错

c# - 在 ASP.NET MVC 中不使用 IoC/DI、UoW 和存储库模式将逻辑从 Controller 操作移动到 "service layer"

c# - .NET Core 2 EF,对象引用为空

asp.net - 我是否应该对映射表使用复合键,该复合键也用于外键?