在EF Core中更改MigrationsHistoryTable列名称

时间:2017-01-03 18:01:44

标签: entity-framework-core

我的EF Core数据库中有一个标准化的所有表名和列名,以使用snake_case。我能够更改迁移历史记录表名称和架构以匹配数据库的其余部分,但我无法找到将列从MigrationId更改为migration_id和{{1}的方法到ProductVersion

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分: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>();