カスタムの移行履歴テーブルCustom Migrations History Table

既定では、EF Core の追跡でという名前のテーブルに記録して、移行をデータベースに適用されている__EFMigrationsHistoryします。By default, EF Core keeps track of which migrations have been applied to the database by recording them in a table named __EFMigrationsHistory. さまざまな理由から、ニーズに合うように、このテーブルをカスタマイズします。For various reasons, you may want to customize this table to better suit your needs.

重要

移行履歴テーブルをカスタマイズする場合は移行を適用する必要があります、データベースの既存のテーブルを更新します。If you customize the Migrations history table after applying migrations, you are responsible for updating the existing table in the database.

スキーマとテーブル名Schema and table name

スキーマと名前を使用してテーブルを変更することができます、MigrationsHistoryTable()メソッドOnConfiguring()(またはConfigureServices()の ASP.NET core)。You can change the schema and table name using the MigrationsHistoryTable() method in OnConfiguring() (or ConfigureServices() on ASP.NET Core). SQL Server EF Core プロバイダーを使用する例を示します。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"));

その他の変更Other changes

表に、その他の側面を構成するには、オーバーライドおよびプロバイダーに固有の置換IHistoryRepositoryサービス。To configure additional aspects of the table, override and replace the provider-specific IHistoryRepository service. MigrationId 列名を変更する例を次に示しますId SQL サーバーにします。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>();

警告

SqlServerHistoryRepository 内部の名前空間内で、将来のリリースで変更可能性があります。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");
    }
}