Skip to content

Savepoint error on migrations #36702

@Donistivanov

Description

@Donistivanov

Bug description

I first created an issue here: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql#1986 that has more comments and context

But last night I took a closer look and I thought this would be a better place to describe the bug which I think happens in here: https://github.com/dotnet/efcore/blob/release/10.0/src/EFCore.Relational/Update/Internal/BatchExecutor.cs

I couldn't trace the full control flow, but I did get some context into the code, so I would be curious to know how and when this gets called.

Your code

https://github.com/Donistivanov/SavepointErrorReproduction

Stack traces

fail: Microsoft.EntityFrameworkCore.Database.Transaction[20205]
      An error occurred using a transaction.
An error occurred using a transaction.
MySqlConnector.MySqlException (0x80004005): SAVEPOINT __EFSavePoint does not exist
   at MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 1081
   at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 37
   at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 131
   at MySqlConnector.MySqlDataReader.InitAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 487
   at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
   at MySqlConnector.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 309
   at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 108
   at Microsoft.EntityFrameworkCore.Storage.RelationalTransaction.ReleaseSavepoint(String name)

Verbose output

Build started...
Build succeeded.
Dropping database 'ef' on server 'internalmysql.doni.vpn'.
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (160ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      DROP DATABASE `ef`;
Successfully dropped database 'ef'.
Using project '/Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj'.
Using startup project '/Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj'.
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=/var/folders/_q/468yc59s2bs774gxbl7rdxlm0000gn/T/tmpR0qCER.tmp /verbosity:quiet /nologo /Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj
dotnet msbuild /target:GetEFProjectMetadata /property:EFProjectMetadataFile=/var/folders/_q/468yc59s2bs774gxbl7rdxlm0000gn/T/tmpU7ZJhw.tmp /verbosity:quiet /nologo /Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj
dotnet exec --depsfile /Users/doniivanov/projects/open-source/SavepointErrorRepro/bin/Debug/net9.0/SavepointErrorRepro.deps.json --additionalprobingpath /Users/doniivanov/.nuget/packages --runtimeconfig /Users/doniivanov/projects/open-source/SavepointErrorRepro/bin/Debug/net9.0/SavepointErrorRepro.runtimeconfig.json /Users/doniivanov/.dotnet/tools/.store/dotnet-ef/9.0.8/dotnet-ef/9.0.8/tools/net8.0/any/tools/netcoreapp2.0/any/ef.dll database update --assembly /Users/doniivanov/projects/open-source/SavepointErrorRepro/bin/Debug/net9.0/SavepointErrorRepro.dll --project /Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj --startup-assembly /Users/doniivanov/projects/open-source/SavepointErrorRepro/bin/Debug/net9.0/SavepointErrorRepro.dll --startup-project /Users/doniivanov/projects/open-source/SavepointErrorRepro/SavepointErrorRepro.csproj --project-dir /Users/doniivanov/projects/open-source/SavepointErrorRepro/ --root-namespace SavepointErrorRepro --language C# --framework net9.0 --nullable --working-dir /Users/doniivanov/projects/open-source/SavepointErrorRepro --verbose
Using assembly 'SavepointErrorRepro'.
Using startup assembly 'SavepointErrorRepro'.
Using application base '/Users/doniivanov/projects/open-source/SavepointErrorRepro/bin/Debug/net9.0'.
Using working directory '/Users/doniivanov/projects/open-source/SavepointErrorRepro'.
Using root namespace 'SavepointErrorRepro'.
Using project directory '/Users/doniivanov/projects/open-source/SavepointErrorRepro/'.
Remaining arguments: .
Finding DbContext classes...
Using environment 'Development'.
Finding IDesignTimeDbContextFactory implementations...
Finding DbContext classes in the project...
Found DbContext 'ApplicationDbContext'.
Finding application service provider in assembly 'SavepointErrorRepro'...
Finding Microsoft.Extensions.Hosting service provider...
Using application service provider from Microsoft.Extensions.Hosting.
Using context 'ApplicationDbContext'.
Finding design-time services referenced by assembly 'SavepointErrorRepro'...
Finding design-time services referenced by assembly 'SavepointErrorRepro'...
No referenced design-time services were found.
Finding design-time services for provider 'Pomelo.EntityFrameworkCore.MySql'...
Using design-time services from provider 'Pomelo.EntityFrameworkCore.MySql'.
Finding IDesignTimeServices implementations in assembly 'SavepointErrorRepro'...
No design-time services were found.
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (58ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE DATABASE `ef`;
Executed DbCommand (58ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE DATABASE `ef`;
info: Microsoft.EntityFrameworkCore.Migrations[20411]
      Acquiring an exclusive lock for migration application. See https://aka.ms/efcore-docs-migrations-lock for more information if this takes too long.
Acquiring an exclusive lock for migration application. See https://aka.ms/efcore-docs-migrations-lock for more information if this takes too long.
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (41ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT GET_LOCK('__ef_EFMigrationsLock', 259200)
Executed DbCommand (41ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT GET_LOCK('__ef_EFMigrationsLock', 259200)
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (99ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE IF NOT EXISTS `__EFMigrationsHistory` (
          `MigrationId` varchar(150) CHARACTER SET utf8mb4 NOT NULL,
          `ProductVersion` varchar(32) CHARACTER SET utf8mb4 NOT NULL,
          CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
      ) CHARACTER SET=utf8mb4;
Executed DbCommand (99ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE IF NOT EXISTS `__EFMigrationsHistory` (
    `MigrationId` varchar(150) CHARACTER SET utf8mb4 NOT NULL,
    `ProductVersion` varchar(32) CHARACTER SET utf8mb4 NOT NULL,
    CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
) CHARACTER SET=utf8mb4;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (40ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='ef' AND TABLE_NAME='__EFMigrationsHistory';
Executed DbCommand (40ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='ef' AND TABLE_NAME='__EFMigrationsHistory';
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (43ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT `MigrationId`, `ProductVersion`
      FROM `__EFMigrationsHistory`
      ORDER BY `MigrationId`;
Executed DbCommand (43ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `MigrationId`, `ProductVersion`
FROM `__EFMigrationsHistory`
ORDER BY `MigrationId`;
info: Microsoft.EntityFrameworkCore.Migrations[20402]
      Applying migration '20250902225056_InitialCreate'.
Applying migration '20250902225056_InitialCreate'.
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (47ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      ALTER DATABASE CHARACTER SET utf8mb4;
Executed DbCommand (47ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER DATABASE CHARACTER SET utf8mb4;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (92ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE `Blogs` (
          `BlogId` int NOT NULL AUTO_INCREMENT,
          `Url` longtext CHARACTER SET utf8mb4 NOT NULL,
          CONSTRAINT `PK_Blogs` PRIMARY KEY (`BlogId`)
      ) CHARACTER SET=utf8mb4;
Executed DbCommand (92ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `Blogs` (
    `BlogId` int NOT NULL AUTO_INCREMENT,
    `Url` longtext CHARACTER SET utf8mb4 NOT NULL,
    CONSTRAINT `PK_Blogs` PRIMARY KEY (`BlogId`)
) CHARACTER SET=utf8mb4;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (45ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
      VALUES ('20250902225056_InitialCreate', '9.0.8');
Executed DbCommand (45ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20250902225056_InitialCreate', '9.0.8');
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (36ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT `b`.`BlogId`, `b`.`Url`
      FROM `Blogs` AS `b`
      WHERE `b`.`Url` = 'http://test.com'
      LIMIT 1
Executed DbCommand (36ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `b`.`BlogId`, `b`.`Url`
FROM `Blogs` AS `b`
WHERE `b`.`Url` = 'http://test.com'
LIMIT 1
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (55ms) [Parameters=[@p0='?' (Size = 4000)], CommandType='Text', CommandTimeout='30']
      INSERT INTO `Blogs` (`Url`)
      VALUES (@p0);
      SELECT `BlogId`
      FROM `Blogs`
      WHERE ROW_COUNT() = 1 AND `BlogId` = LAST_INSERT_ID();
Executed DbCommand (55ms) [Parameters=[@p0='?' (Size = 4000)], CommandType='Text', CommandTimeout='30']
INSERT INTO `Blogs` (`Url`)
VALUES (@p0);
SELECT `BlogId`
FROM `Blogs`
WHERE ROW_COUNT() = 1 AND `BlogId` = LAST_INSERT_ID();
fail: Microsoft.EntityFrameworkCore.Database.Transaction[20205]
      An error occurred using a transaction.
An error occurred using a transaction.
MySqlConnector.MySqlException (0x80004005): SAVEPOINT __EFSavePoint does not exist
   at MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 1081
   at MySqlConnector.Core.ResultSet.ReadResultSetHeaderAsync(IOBehavior ioBehavior) in /_/src/MySqlConnector/Core/ResultSet.cs:line 37
   at MySqlConnector.MySqlDataReader.ActivateResultSet(CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 131
   at MySqlConnector.MySqlDataReader.InitAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, IDictionary`2 cachedProcedures, IMySqlCommand command, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlDataReader.cs:line 487
   at MySqlConnector.Core.CommandExecutor.ExecuteReaderAsync(CommandListPosition commandListPosition, ICommandPayloadCreator payloadCreator, CommandBehavior behavior, Activity activity, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/CommandExecutor.cs:line 56
   at MySqlConnector.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySqlCommand.cs:line 309
   at MySqlConnector.MySqlCommand.ExecuteNonQuery() in /_/src/MySqlConnector/MySqlCommand.cs:line 108
   at Microsoft.EntityFrameworkCore.Storage.RelationalTransaction.ReleaseSavepoint(String name) 
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (40ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT RELEASE_LOCK('__ef_EFMigrationsLock')
Executed DbCommand (40ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT RELEASE_LOCK('__ef_EFMigrationsLock')
Done.

EF Core version

9.0.0

Database provider

Pomelo.EntityFrameworkCore.MySql

Target framework

.NET 9.0

Operating system

macOS 15.6.1

IDE

VSCode

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions