Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A estrutura de entidade com migrações de banco de dados mysql falha ao criar índices


eu tive o mesmo problema, depois de ler as postagens, decidi criar uma classe herda de MySqlMigrationSqlGenerator e substituir substituição protegida MigrationStatement Generate ( CreateIndexOperation op ) , então na configuração da migração eu adiciono:SetSqlGenerator("MySql.Data.MySqlClient", new myMigrationSQLGenerator());

este é o código da 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 este é o código em Migrations\Configuration.cs :
    public Configuration ()
    {           
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );
    }

este trabalho para mim.