Change MigrationsHistoryTable column names in EF Core



I have a standardized all table and column names in my EF Core database to use snake_case. I was able to change the migrations history table name and schema to match the rest of the database, but I am not able to find a way to change the columns from MigrationId to migration_id and ProductVersion to product_version.

Any ideas on how this could be done?

1/3/2017 6:01:44 PM

Accepted Answer

Here is an example of how to do it on SQL Server.

First, create a custom implementation of SqlServerHistoryRepository overriding 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)

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

Then replace the replace the service with your custom implementation.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options
        .ReplaceService<SqlServerHistoryRepository, MyHistoryRepository>();
1/11/2017 4:38:29 PM

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow