自定义迁移历史记录表Custom Migrations History Table

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

重要

如果在应用迁移自定义迁移历史记录表,则需要负责更新数据库中的现有表。

架构和表名称Schema and table name

你可以使用 OnConfiguring() 中的 MigrationsHistoryTable() 方法(或 ASP.NET Core 上的 ConfigureServices())更改架构和表名。 下面是一个示例,说明如何使用 SQL Server EF Core 提供程序。

  1. protected override void OnConfiguring(DbContextOptionsBuilder options)
  2. => options.UseSqlServer(
  3. connectionString,
  4. x => x.MigrationsHistoryTable("__MyMigrationsHistory", "mySchema"));

其他更改Other changes

若要配置表的其他方面,请重写并替换特定于提供程序的 IHistoryRepository 服务。 下面是将 MigrationId 列名称更改为 SQL Server 上的Id的示例。

  1. protected override void OnConfiguring(DbContextOptionsBuilder options)
  2. => options
  3. .UseSqlServer(connectionString)
  4. .ReplaceService<IHistoryRepository, MyHistoryRepository>();

警告

SqlServerHistoryRepository 位于内部命名空间内部,并且在将来的版本中可能会更改。

  1. class MyHistoryRepository : SqlServerHistoryRepository
  2. {
  3. public MyHistoryRepository(HistoryRepositoryDependencies dependencies)
  4. : base(dependencies)
  5. {
  6. }
  7. protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
  8. {
  9. base.ConfigureTable(history);
  10. history.Property(h => h.MigrationId).HasColumnName("Id");
  11. }
  12. }