自定义迁移历史记录表
默认情况下,EF Core 在名为 __EFMigrationsHistory
的表中记录哪些迁移已应用到数据库中,从而跟踪这些迁移。 出于各种原因,可能需要自定义此表,以更好地满足你的需求。
重要
如果在应用迁移后自定义 Migrations 历史记录表,则你负责更新数据库中的现有表。
架构和表名称
可以使用 OnConfiguring()
(或 ASP.NET Core 上的 ConfigureServices()
)中的 MigrationsHistoryTable()
方法更改架构和表名。 下面是使用 SQL Server EF Core 提供程序的示例。
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(
_connectionString,
x => x.MigrationsHistoryTable("__MyMigrationsHistory", "mySchema"));
其他更改
若要配置表的其他方面,请替代和替换特定于提供程序的 IHistoryRepository
服务。 以下是一个在 SQL Server 上将 MigrationId 列名称更改为 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");
}
}