Mysql
 sql >> база данни >  >> RDS >> Mysql

Рамката на обект с миграциите на база данни mysql се провалят при създаване на индекси

имах същия проблем, след като прочетох публикациите, реших да създам клас, наследяващ MySqlMigrationSqlGenerator и да отменя защитено отмяна на MigrationStatement Generate ( CreateIndexOperation op ) , след което при конфигурацията на миграцията добавям:SetSqlGenerator ( "MySql.Data.MySqlClient", нов myMigrationSQLGenerator ( ) );

това е кодът на класа:

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

и това е кодът на Migrations\Configuration.cs :

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

това работи за мен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'fetch' в PDO получава само един резултат

  2. Разлика между структурата на две таблици

  3. Mysql машина за промяна на таблицата MyISAM към InnoDB

  4. Как да активирате MySQL Query Cache

  5. java.sql.Разширение за връзка за SSH