カスタム移行履歴テーブル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() (または ASP.NET Core) を使用して、スキーマとテーブル名を変更でき ConfigureServices() ます。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. SQL Server の MigrationId 列名を Id に変更する例を次に示します。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");
    }
}