-
-
Notifications
You must be signed in to change notification settings - Fork 415
Open
Description
Describe the bug
When a MariaDB table has duplicate FK names across multiple tables, though unique per-table, Pomelo (or an upstream package?) throws an exception with an non-specific message: "Subquery returns more than 1 row"
I believe MariaDB, as of v12.1, supports FK names that are unique per-table rather than per-database. So, Pomelo should allow that without an error. Either way, if an error must be thrown, please change it to something that better explains the problem: "Duplicate Foreign Key names were detected."
To Reproduce
- have a MariaDB database running v12.1.1.
- Create two tables that have one FK each, and give each FK the same name.
- Run Pomelo code that calls GetConstraints(). That should give you an exception.
Repro console app is attached.
Technical details (please complete the following information):
- Database server version: MariaDB 12.1.1
- Operating system: Windows 11 24H2
- Pomelo.EntityFrameworkCore.MySql version: 9.0.0
- Other technical details: EF Core Power Tools 2.6.1091
MySqlConnector.MySqlException (0x80004005): Subquery returns more than 1 row
at MySqlConnector.Core.ServerSession.ReceiveReplyAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 1081
at MySqlConnector.Core.ResultSet.ScanRowAsync(IOBehavior ioBehavior, Row row, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ResultSet.cs:line 241
at MySqlConnector.Core.ResultSet.ReadAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ResultSet.cs:line 204
at MySqlConnector.Core.ResultSet.Read() in /_/src/MySqlConnector/Core/ResultSet.cs:line 196
at Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal.MySqlDatabaseModelFactory.GetConstraints(DbConnection connection, IReadOnlyList`1 tables)
at Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal.MySqlDatabaseModelFactory.GetTables(DbConnection connection, Func`3 filter, String defaultCharSet, String defaultCollation)
at Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal.MySqlDatabaseModelFactory.GetDatabase(DbConnection connection, DatabaseModelFactoryOptions options)
at Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal.MySqlDatabaseModelFactory.Create(DbConnection connection, DatabaseModelFactoryOptions options)
at Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal.MySqlDatabaseModelFactory.Create(String connectionString, DatabaseModelFactoryOptions options)
at RevEng.Core.ReverseEngineerScaffolder.ScaffoldModel(String connectionString, DatabaseModelFactoryOptions databaseOptions, ModelReverseEngineerOptions modelOptions, ModelCodeGenerationOptions codeOptions, Boolean removeNullableBoolDefaults, Boolean excludeNavigations, Boolean dbContextOnly, Boolean entitiesOnly, Boolean useSchemaFolders, Boolean useSchemaNamespaces) in D:\a\EFCorePowerTools\EFCorePowerTools\src\Core\RevEng.Core.80\ReverseEngineerScaffolder.cs:line 468
at RevEng.Core.ReverseEngineerScaffolder.GenerateDbContext(ReverseEngineerCommandOptions options, List`1 schemas, String outputContextDir, String modelNamespace, String contextNamespace, String projectPath, String outputPath, String rootNameSpace) in D:\a\EFCorePowerTools\EFCorePowerTools\src\Core\RevEng.Core.80\ReverseEngineerScaffolder.cs:line 93
at RevEng.Core.ReverseEngineerRunner.GenerateFiles(ReverseEngineerCommandOptions options) in D:\a\EFCorePowerTools\EFCorePowerTools\src\Core\RevEng.Core.80\ReverseEngineerRunner.cs:line 92
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels