Ошибка во время миграции MySql.EntityFrameworkCore
Проект .net core, БД Mysql(MySql.EntityFrameworkCore).
Модель:
public class ProductInvoice
{
public int IdInvoice { get; set; }
public int IdProduct { get; set; }
public int IdCell { get; set; }
public int Count { get; set; }
public Product Product { get; set; }
public Invoice Invoice { get; set; }
public WarehouseStreetLevelCell Cell { get; set; }
}
OnModelCreating:
//Many to many Invoice vs Products
modelBuilder.Entity<ProductInvoice>()
.HasKey(p => new { p.IdInvoice, p.IdProduct, p.IdCell });
modelBuilder.Entity<ProductInvoice>()
.HasOne(ru => ru.Product)
.WithMany(r => r.ProductInvoices)
.HasForeignKey(pr => pr.IdProduct);
modelBuilder.Entity<ProductInvoice>()
.HasOne(pr => pr.Invoice)
.WithMany(p => p.ProductInvoices)
.HasForeignKey(pr => pr.IdInvoice);
modelBuilder.Entity<ProductInvoice>()
.HasOne(pr => pr.Cell)
.WithMany(p => p.Invoices)
.HasForeignKey(pr => pr.IdCell);
Миграция:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_ProductsInvoices",
table: "ProductsInvoices");
migrationBuilder.AddPrimaryKey(
name: "PK_ProductsInvoices",
table: "ProductsInvoices",
columns: new[] { "IdInvoice", "IdProduct", "IdCell" });
}
Таблица пустая, данных в ней нет. Скрин структуры таблицы:
Ошибка при попытке сделать update:
fail: Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] DROP PROCEDURE IF EXISTS
MYSQL_AFTER_ADD_PRIMARY_KEY
; CREATE PROCEDUREMYSQL_AFTER_ADD_PRIMARY_KEY
(INSCHEMA_NAME_ARGUMENT
VARCHAR(255), INTABLE_NAME_ARGUMENT
VARCHAR(255), INCOLUMN_NAME_ARGUMENT
VARCHAR(255)) BEGIN DECLARE HAS_AUTO_INCREMENT_ID INT(11); DECLARE PRIMARY_KEY_COLUMN_NAME VARCHAR(255); DECLARE PRIMARY_KEY_TYPE VARCHAR(255); DECLARE SQL_EXP VARCHAR(1000); SELECT COUNT() INTO HAS_AUTO_INCREMENT_ID FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; IF HAS_AUTO_INCREMENT_ID THEN SELECTCOLUMN_TYPE
INTO PRIMARY_KEY_TYPE FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; SELECTCOLUMN_NAME
INTO PRIMARY_KEY_COLUMN_NAME FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; SET SQL_EXP = CONCAT('ALTER TABLE', (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())), '
.', TABLE_NAME_ARGUMENT, '
MODIFY COLUMN', PRIMARY_KEY_COLUMN_NAME, '
', PRIMARY_KEY_TYPE, ' NOT NULL AUTO_INCREMENT;'); SET @SQL_EXP = SQL_EXP; PREPARE SQL_EXP_EXECUTE FROM @SQL_EXP; EXECUTE SQL_EXP_EXECUTE; DEALLOCATE PREPARE SQL_EXP_EXECUTE; END IF; END; Failed executing DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] DROP PROCEDURE IF EXISTSMYSQL_AFTER_ADD_PRIMARY_KEY
; CREATE PROCEDUREMYSQL_AFTER_ADD_PRIMARY_KEY
(INSCHEMA_NAME_ARGUMENT
VARCHAR(255), INTABLE_NAME_ARGUMENT
VARCHAR(255), INCOLUMN_NAME_ARGUMENT
VARCHAR(255)) BEGIN DECLARE HAS_AUTO_INCREMENT_ID INT(11); DECLARE PRIMARY_KEY_COLUMN_NAME VARCHAR(255); DECLARE PRIMARY_KEY_TYPE VARCHAR(255); DECLARE SQL_EXP VARCHAR(1000); SELECT COUNT() INTO HAS_AUTO_INCREMENT_ID FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; IF HAS_AUTO_INCREMENT_ID THEN SELECTCOLUMN_TYPE
INTO PRIMARY_KEY_TYPE FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; SELECTCOLUMN_NAME
INTO PRIMARY_KEY_COLUMN_NAME FROMinformation_schema
.COLUMNS
WHERETABLE_SCHEMA
= (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())) ANDTABLE_NAME
= TABLE_NAME_ARGUMENT ANDCOLUMN_NAME
= COLUMN_NAME_ARGUMENT ANDCOLUMN_TYPE
LIKE '%int%' ANDCOLUMN_KEY
= 'PRI'; SET SQL_EXP = CONCAT('ALTER TABLE', (SELECT IFNULL(SCHEMA_NAME_ARGUMENT, SCHEMA())), '
.', TABLE_NAME_ARGUMENT, '
MODIFY COLUMN', PRIMARY_KEY_COLUMN_NAME, '
', PRIMARY_KEY_TYPE, ' NOT NULL AUTO_INCREMENT;'); SET @SQL_EXP = SQL_EXP; PREPARE SQL_EXP_EXECUTE FROM @SQL_EXP; EXECUTE SQL_EXP_EXECUTE; DEALLOCATE PREPARE SQL_EXP_EXECUTE; END IF; END; MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Parameter '@SQL_EXP' must be defined. at MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex) at MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet) at MySql.Data.MySqlClient.Statement.BindParameters() at MySql.Data.MySqlClient.PreparableStatement.Execute() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable
1 migrationCommands, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) Fatal error encountered during command execution.