Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le cadre d'entité avec les migrations de base de données mysql échoue lors de la création d'index

j'ai eu le même problème, après avoir lu les messages, j'ai décidé de créer une classe hérite de MySqlMigrationSqlGenerator et de remplacer protected override MigrationStatement Generate ( CreateIndexOperation op ) , puis sur la configuration de la migration j'ajoute :SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );

voici le code de la 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;
    }
}

et voici le code sur Migrations\Configuration.cs :

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

ce travail pour moi.