Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transaction mismatch in EntityFramework only

I have a sproc

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

When i call this manually from Sql Server Management studio, i don't get any exception. When I Call this through Entity Framework 6, i get

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

What am I doing wrong? The foreign key constraint is doing roll back but i am checking @@TRANCOUNT.

like image 318
user156144 Avatar asked Oct 23 '25 18:10

user156144


1 Answers

Entity Framework 6 (EF6) Add this line before ExecuteSqlCommand

db.Configuration.EnsureTransactionsForFunctionsAndCommands = false;

like image 74
Sha-Pai Li Avatar answered Oct 27 '25 01:10

Sha-Pai Li