通过


自定义迁移历史记录表

默认情况下,EF Core 通过在名为 __EFMigrationsHistory 的表中记录这些迁移来跟踪哪些迁移已应用于数据库。 出于各种原因,可能需要自定义此表,以便更好地满足你的需求。

重要

如果在应用迁移操作自定义迁移历史记录表,您有责任更新数据库中的现有表。

架构和表名称

可以使用 MigrationsHistoryTable() 方法在 OnConfiguring() 中更改架构和表名称(或在 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");
    }
}