カスタムの移行履歴テーブル

既定では、EF Core はデータベースに適用された移行を追跡するために、__EFMigrationsHistory という名前のテーブルにこれらを記録します。 さまざまな理由から、ニーズに合わせてこのテーブルをカスタマイズしたい場合もあります。

重要

移行を適用した "後で" 移行履歴テーブルをカスタマイズする場合、データベース内の既存のテーブルを更新するのはお客様の責任です。

スキーマとテーブルの名前

スキーマとテーブルの名前は、OnConfiguring()MigrationsHistoryTable() メソッド (または ASP.NET Core の ConfigureServices()) を使用して変更できます。 次に示すのは、SQL Server EF Core プロバイダーを使用する例です。

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

その他の変更点

テーブルの別の側面を構成するには、プロバイダー固有の IHistoryRepository サービスをオーバーライドして置き換えます。 次に示すのは、MigrationId 列名を SQL Server の Id に変更する例です。

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

警告

SqlServerHistoryRepository は内部の名前空間内にあるので、今後のリリースで変更される可能性があります。

internal 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");
    }
}