2017-01-03 8 views
2

Ich habe einen standardisierten Namen für alle Tabellen und Spalten in meiner EF Core-Datenbank, um snake_case zu verwenden. Ich konnte den Namen und das Schema der Migrationshistorietabelle so ändern, dass sie dem Rest der Datenbank entsprechen, aber ich kann keine Möglichkeit finden, die Spalten von MigrationId zu migration_id und ProductVersion zu product_version zu ändern.Ändern Sie die Namen der MigrationsHistoryTable-Spalten in EF Core

Irgendwelche Ideen, wie dies getan werden könnte?

Antwort

2

Hier ist ein Beispiel, wie man es auf SQL Server macht.

Erstellen Sie zuerst eine benutzerdefinierte Implementierung von SqlServerHistoryRepository, die ConfigureTable überschreibt.

class MyHistoryRepository : SqlServerHistoryRepository 
{ 
    public MyHistoryRepository(
     IDatabaseCreator databaseCreator, IRawSqlCommandBuilder rawSqlCommandBuilder, 
     ISqlServerConnection connection, IDbContextOptions options, 
     IMigrationsModelDiffer modelDiffer, 
     IMigrationsSqlGenerator migrationsSqlGenerator, 
     IRelationalAnnotationProvider annotations, 
     ISqlGenerationHelper sqlGenerationHelper) 
     : base(databaseCreator, rawSqlCommandBuilder, connection, options, 
      modelDiffer, migrationsSqlGenerator, annotations, sqlGenerationHelper) 
    { 
    } 

    protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history) 
    { 
     base.ConfigureTable(history); 

     history.Property(h => h.MigrationId).HasColumnName("migration_id"); 
     history.Property(h => h.ProductVersion).HasColumnName("product_version"); 
    } 
} 

Dann ersetzen die den Dienst mit Ihrer benutzerdefinierten Implementierung ersetzen.

protected override void OnConfiguring(DbContextOptionsBuilder options) 
    => options 
     .UseSqlServer(connectionString) 
     .ReplaceService<SqlServerHistoryRepository, MyHistoryRepository>(); 
+0

Mit Blick auf die 'SqlServerHistoryRepository' es scheint nicht eine einfache Möglichkeit zu haben, eine Migrationstabelle auf der gleichen Tabelle für mehrere db Kontexte zu verwenden (das heißt durch eine Art von Unterscheidungs ​​Feld hinzufügen)? – Tseng

+0

Wenn Ihre Migrations-IDs nicht in Konflikt stehen (sehr unwahrscheinlich, da sie auf den zweiten und den benannten Benutzer mit Zeitstempel gesetzt sind), sollten Sie kein Diskriminatorfeld benötigen. – bricelam