如何在丢失最新迁移文件后恢复到旧EF迁移版本
解决EF Core迁移回滚异常的实操步骤
1. 修正EF迁移历史表
由于丢失了migrationNewThree文件,EF执行回滚命令时无法找到对应迁移的定义,仅在本地标记回滚成功,但数据库的__EFMigrationsHistory表中仍保留着migrationNewOne、migrationNewTwo、migrationNewThree的记录,导致数据库状态和EF的本地记录不匹配。
- 打开SQL Server管理工具(如SSMS),定位到目标数据库,打开
__EFMigrationsHistory表 - 删除
MigrationId字段对应migrationNewOne、migrationNewTwo、migrationNewThree的三条记录,仅保留MigrationOld对应的记录
2. 手动清理新增的数据库表
回滚命令未生效,数据库中仍存在vendorTable和vendorAddressTable,需手动删除:
- 在SSMS中找到这两张表,若存在外键关联(如
vendorAddressTable关联vendorTable),先删除关联表,再删除主表 - 确认数据库中仅保留
invoiceTable、customerTable及__EFMigrationsHistory表
3. 重新应用新功能迁移
若migrationNewOne、migrationNewTwo文件仍存在:
- 打开项目控制台,执行命令回滚到新功能的前两步:
Update-Database migrationNewTwo - 重新生成
migrationNewThree迁移文件:Add-Migration migrationNewThree(确保DbContext中已正确配置Vendor、VendorAddress实体类) - 执行
Update-Database完成数据库更新
若新功能迁移文件不全,建议重新生成:
- 确保DbContext中包含所有新功能的实体及配置
- 执行
Add-Migration NewFeatureCombined(自定义迁移名称),生成包含所有新表和变更的单条迁移文件 - 执行
Update-Database完成更新
关键注意事项
- 操作数据库前必须备份,避免数据丢失
- 后续将迁移文件纳入版本控制(如Git),防止再次丢失
内容的提问来源于stack exchange,提问作者Kuth
相关产品推荐
相关产品推荐

