Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entity Framework mit MySQL-Datenbankmigrationen schlagen beim Erstellen von Indizes fehl

Ich hatte das gleiche Problem, nachdem ich die Beiträge gelesen hatte, entschied ich mich, eine Klasse zu erstellen, die von MySqlMigrationSqlGenerator erbt, und protected override MigrationStatement Generate ( CreateIndexOperation op ) zu überschreiben , dann füge ich bei der Konfiguration der Migration hinzu:SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );

das ist der Code der Klasse:

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;
    }
}

und dies ist der Code in Migrations\Configuration.cs :

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

das funktioniert für mich.