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

既定では、EF コアの追跡でという名前のテーブルに記録して、移行の種類をデータベースに適用されている__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 コア プロバイダーを使用する例を次に示します。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");
    }
}