Mysql
 sql >> Database >  >> RDS >> Mysql

Il framework di entità con le migrazioni del database mysql non riesce, durante la creazione degli indici

ho avuto lo stesso problema, dopo aver letto i post, ho deciso di creare una classe eredita da MySqlMigrationSqlGenerator e sovrascrivere override protetto MigrationStatement Generate ( CreateIndexOperation op ) , quindi sulla configurazione della migrazione aggiungo:SetSqlGenerator ("MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );

questo è il codice della classe:

public class myMigrationSQLGenerator : MySqlMigrationSqlGenerator
{
    private string TrimSchemaPrefix ( string table )
    {
        if ( table.StartsWith ( "dbo." ) )
            return table.Replace ( "dbo.", "" );
        return table;
    }

    protected override MigrationStatement Generate ( CreateIndexOperation op )
    {
        var u = new MigrationStatement ( );
        string unique = ( op.IsUnique ? "UNIQUE" : "" ), columns = "";
        foreach ( var col in op.Columns )
        {
            columns += ( $"`{col}` DESC{( op.Columns.IndexOf ( col ) < op.Columns.Count - 1 ? ", " : "" )}" );
        }
        u.Sql = $"CREATE {unique} INDEX `{op.Name}` ON `{TrimSchemaPrefix ( op.Table )}` ({columns}) USING BTREE";
        return u;
    }
}

e questo è il codice su Migrations\Configuration.cs :

    public Configuration ()
    {           
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );
    }

questo funziona per me.