2017-01-03 11 views
2

私はEFコアデータベース内のすべてのテーブル名とカラム名を標準化してsnake_caseを使用しています。移行履歴テーブルの名前とスキーマを他のデータベースと一致するように変更できましたが、MigrationIdからmigration_idProductVersionからproduct_versionに列を変更する方法が見つかりません。EFコアのMigrationsHistoryTableカラム名を変更

どのようにこれを行うことができますか?

答えて

2

ここでは、SQL Server上で実行する方法の例を示します。

最初にSqlServerHistoryRepositoryのカスタム実装を作成して、ConfigureTableをオーバーライドします。

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

その後、あなたのカスタム実装でサービスを置き換える置き換えます。

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

を見ると、 '(すなわち、弁別フィールドの種類を追加することで)同じテーブル上で複数のDBコンテキストの1移行テーブルを使用するための簡単な方法を持っていないようですSqlServerHistoryRepository'? – Tseng

+0

移行IDが競合していない限り(2番目のタイムスタンプとユーザーの名前にタイムスタンプが付けられている可能性はほとんどありません)、弁別子フィールドは必要ありません。 – bricelam