Benutzerdefinierte Migrations History TableCustom Migrations History Table

In der Standardeinstellung EF Core verfolgt Überblick darüber, welche Migrationen auf die Datenbank angewendet wurden, indem Sie diese in einer Tabelle mit dem Namen aufzeichnen __EFMigrationsHistory.By default, EF Core keeps track of which migrations have been applied to the database by recording them in a table named __EFMigrationsHistory. Aus verschiedenen Gründen empfiehlt es sich um diese Tabelle, um Ihre Bedürfnisse anzupassen.For various reasons, you may want to customize this table to better suit your needs.

Wichtig

Wenn Sie anpassen, dass die Migrationen Verlaufstabelle nach Migrationen angewendet werden, Sie sind verantwortlich für die vorhandene Tabelle in der Datenbank zu aktualisieren.If you customize the Migrations history table after applying migrations, you are responsible for updating the existing table in the database.

Schema und TabellennameSchema and table name

Sie können ändern, das Schema und Tabellennamen mit dem MigrationsHistoryTable() -Methode in der OnConfiguring() (oder ConfigureServices() in ASP.NET Core).You can change the schema and table name using the MigrationsHistoryTable() method in OnConfiguring() (or ConfigureServices() on ASP.NET Core). Hier ist ein Beispiel zur Verwendung des SQL Server-EF Core-Anbieters.Here is an example using the SQL Server EF Core provider.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlServer(
        connectionString,
        x => x.MigrationsHistoryTable("__MyMigrationsHistory", "mySchema"));

Andere ÄnderungenOther changes

Um zusätzliche Aspekte von in der Tabelle zu konfigurieren, außer Kraft setzen, und Ersetzen Sie die anbieterspezifische IHistoryRepository Service.To configure additional aspects of the table, override and replace the provider-specific IHistoryRepository service. Hier ist ein Beispiel zum Ändern der Spaltenname MigrationId Id auf SQL Server.Here is an example of changing the MigrationId column name to Id on SQL Server.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options
        .UseSqlServer(connectionString)
        .ReplaceService<IHistoryRepository, MyHistoryRepository>();

Warnung

SqlServerHistoryRepository befindet sich in einem internen Namespace und in zukünftigen Versionen möglicherweise geändert.SqlServerHistoryRepository is inside an internal namespace and may change in future releases.

class MyHistoryRepository : SqlServerHistoryRepository
{
    public MyHistoryRepository(HistoryRepositoryDependencies dependencies)
        : base(dependencies)
    {
    }

    protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
    {
        base.ConfigureTable(history);

        history.Property(h => h.MigrationId).HasColumnName("Id");
    }
}