EF7执行Update-Database时所有迁移均运行的技术咨询
迁移重复执行问题的排查与解决
排查步骤
- 核对迁移ID一致性:检查数据库中
__EFMigrationsHistory表的MigrationId值,与Get-Migration输出的id列是否完全匹配(包括空格、大小写、下划线),任何不匹配都会导致EF判定迁移未应用。 - 验证连接目标:执行
Get-DbContext命令,确认当前DbContext指向的数据库是你实际操作的目标库,避免因连接到其他数据库(如测试库、备用库)导致EF找不到已有的迁移历史。 - 检查迁移文件完整性:确认本地迁移文件的
MigrationId未被手动修改,Up()/Down()方法的逻辑未被篡改,否则EF会将其识别为新迁移。
解决方法
手动标记迁移为已应用
确认数据库已实际执行过所有迁移后,执行以下命令(替换为列表中最后一个迁移的ID):Update-Database -Migration "20230822155929_Company_AddressId_Null"该命令会将指定迁移及之前的所有迁移标记为已应用状态,不会重复执行迁移脚本。
修复ID不匹配问题
如果数据库中__EFMigrationsHistory的记录与本地迁移ID不一致,可手动修改表中的MigrationId值,使其与Get-Migration输出的id完全一致(操作前请务必备份数据库)。重置迁移(极端场景)
若上述方法均无效,可备份业务数据后重置迁移流程:- 删除数据库中的
__EFMigrationsHistory表 - 删除项目内所有已生成的迁移文件
- 重新生成初始迁移并同步到数据库:
Add-Migration InitialCreate -Force Update-Database
- 删除数据库中的
内容的提问来源于stack exchange,提问作者MDC
相关产品推荐
相关产品推荐

