Hier ist ein Beispiel, wie man es auf SQL Server macht.
Erstellen Sie zuerst eine benutzerdefinierte Implementierung von SqlServerHistoryRepository
, die ConfigureTable
überschreibt.
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");
}
}
Dann ersetzen die den Dienst mit Ihrer benutzerdefinierten Implementierung ersetzen.
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options
.UseSqlServer(connectionString)
.ReplaceService<SqlServerHistoryRepository, MyHistoryRepository>();
Mit Blick auf die 'SqlServerHistoryRepository' es scheint nicht eine einfache Möglichkeit zu haben, eine Migrationstabelle auf der gleichen Tabelle für mehrere db Kontexte zu verwenden (das heißt durch eine Art von Unterscheidungs Feld hinzufügen)? – Tseng
Wenn Ihre Migrations-IDs nicht in Konflikt stehen (sehr unwahrscheinlich, da sie auf den zweiten und den benannten Benutzer mit Zeitstempel gesetzt sind), sollten Sie kein Diskriminatorfeld benötigen. – bricelam