sql >> Databasteknik >  >> RDS >> Mysql

Entitetsramverk med mysql-databasmigreringar misslyckas när index skapas

Jag hade samma problem, efter att jag läst inlägg bestämde jag mig för att skapa en klass som ärver MySqlMigrationSqlGenerator och åsidosätta skyddad åsidosättning MigrationStatement Generate ( CreateIndexOperation op ) , sedan vid konfigurationen av migreringen lägger jag till:SetSqlGenerator ( "MySql.Data.MySqlClient", ny myMigrationSQLGenerator ( ) );

detta är klassens kod:

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

och det här är koden på Migrations\Configuration.cs :

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

det här fungerar för mig.



  1. det går inte att skapa autoinkrementerande primärnyckel med flask-sqlalchemy

  2. Hantera primärnyckelkonflikter vid infogning av data i SQLite

  3. Databasdelning vs partitionering

  4. Php mysql pdo-fråga:fyll i variabel med frågeresultat