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. MySQL के साथ सोलर का उपयोग करना

  2. हाइबरनेट के साथ ऑटो इंक्रीमेंटेड कंपोजिट आईडी सीक्वेंस की मैपिंग में व्यवहार की व्याख्या करें

  3. Mysql से पुनरावर्ती php का उपयोग करके एक सरणी बनाना

  4. मौजूदा तालिका में ऑटो-इन्क्रीमेंट आईडी जोड़ें?

  5. 1 से शुरू होने के बाद डालें; लेकिन पिछले मूल्य से फिर से शुरू हटाने के बाद डालें