EF Core 默认使用 dbo.__EFMigrationsHistory 表记录迁移状态,可通过 MigrationsHistoryTable 方法自定义表名和模式;替换 IHistoryRepository 可修改列名;添加审计字段需手动执行 SQL 增列并设默认值;配置后需验证表名、字段及迁移写入是否生效。

EF Core 默认使用 __EFMigrationsHistory 表(位于 dbo 模式下)记录迁移执行状态,但你可以通过配置轻松自定义它的名称、模式,甚至字段结构——关键在于用对方法,避免直接改表引发一致性风险。
修改表名和数据库模式
这是最常用也最安全的自定义方式,只需在 OnConfiguring 中调用 MigrationsHistoryTable:
- 指定新表名和 Schema(模式),例如改为
audit.__Migrations - 代码示例:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(connectionString, x => x.MigrationsHistoryTable("__Migrations", "audit")); }登录后复制
- 首次运行
dotnet ef database update时,EF Core 会自动创建该表;已有迁移历史需手动迁移数据或清空重来
替换列名(如 MigrationId → Id)
默认字段名不满足命名规范?可通过替换 IHistoryRepository 实现:
- 新建继承自
SqlServerHistoryRepository的类,重写ConfigureTable方法 - 在
OnConfiguring中用.ReplaceService<ihistoryrepository customhistoryrepository>()</ihistoryrepository>注册 - 注意:列名变更后,所有环境必须同步更新,否则迁移命令会报错
添加审计字段(如 AppliedAt、AppliedBy)
EF Core 不允许直接扩展历史表结构,但可安全增强:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~