sql >> Database >  >> RDS >> Mysql

Entiteitsframework met mysql-databasemigraties mislukken bij het maken van indexen

ik had hetzelfde probleem, nadat ik op berichten had gelezen, besloot ik een klasse te maken die overerft van MySqlMigrationSqlGenerator en beschermde overschrijving MigrationStatement Generate ( CreateIndexOperation op ) te negeren , dan voeg ik bij de configuratie van de migratie toe:SetSqlGenerator ("MySql.Data.MySqlClient", nieuwe myMigrationSQLGenerator ( ));

dit is de code van de klas:

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

en dit is de code op Migrations\Configuration.cs :

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

dit werkt voor mij.



  1. Hoe om te gaan met databasecrashes (Glassfish/MySQL)?

  2. Tekst extraheren tussen substrings in MySQL

  3. Hoe de LIKE-operator werkt in SQLite

  4. MySQL INVOEREN IN [temp table] VANUIT [Opgeslagen procedure]