Ho un nome standardizzato di tutti i nomi di tabelle e colonne nel mio database EF Core per utilizzare snake_case. Sono stato in grado di modificare il nome e lo schema della tabella di cronologia delle migrazioni in modo che corrispondessero al resto del database, ma non sono in grado di trovare un modo per modificare le colonne da MigrationId
a migration_id
e ProductVersion
a product_version
.
Qualche idea su come questo potrebbe essere fatto?
Ecco un esempio di come farlo su SQL Server.
Innanzitutto, creare un'implementazione personalizzata di SqlServerHistoryRepository
sostituisce 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");
}
}
Quindi sostituire il servizio di sostituzione con l'implementazione personalizzata.
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options
.UseSqlServer(connectionString)
.ReplaceService<SqlServerHistoryRepository, MyHistoryRepository>();