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

Entitetsramme med mysql-databasemigreringer mislykkes, når der oprettes indekser

Jeg havde det samme problem, efter at jeg havde læst indlæg, besluttede jeg at oprette en klasse som arver MySqlMigrationSqlGenerator og tilsidesætte beskyttet tilsidesættelse MigrationStatement Generate ( CreateIndexOperation op ) , så ved konfiguration af migration tilføjer jeg:SetSqlGenerator ( "MySql.Data.MySqlClient", ny myMigrationSQLGenerator ( ) );

dette er klassens kode:

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

og dette er koden på Migrations\Configuration.cs :

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

dette arbejde for mig.



  1. returnere værdi ved en position fra STRING_SPLIT i SQL Server 2016

  2. SQL ALTER TABLE Syntaks – Listet efter DBMS

  3. Hvordan opretter man en global konfigurationsfil?

  4. Forkert strengværdi:'\xEF\xBF\xBD' for kolonne