-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Open
Labels
Description
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