我的EF Core数据库中有一个标准化的所有表名和列名,以使用snake_case。我能够更改迁移历史记录表名称和架构以匹配数据库的其余部分,但我无法找到将列从MigrationId
更改为migration_id
和{{1}的方法到ProductVersion
。
关于如何做到这一点的任何想法?
答案 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>();