EF Core ASP.Net Core 修改数据库migration的正确操作方式咨询
EF Core 迁移修改正确操作指南
核心结论
不要手动修改已应用的旧迁移文件,也禁止直接调整Designer文件,根据迁移的应用状态选择对应操作即可同时满足数据完整保留、迁移正常运行的要求。
分场景操作方案
场景1:迁移未应用到任何环境(本地/测试/生产库都未执行过)
- 直接删除对应迁移的
.cs文件、配套的.Designer.cs文件 - 重新运行命令生成新迁移即可:
Add-Migration [自定义迁移名称]
场景2:迁移已应用到至少一个环境(尤其存在生产业务数据的场景)
该场景下绝对不能修改旧迁移和Designer文件,需新增增量迁移完成修改,步骤如下:
- 调整实体类或EF Core模型配置到最终期望的结构
- 运行命令生成增量迁移:
EF Core会自动对比当前模型和历史快照的差异,自动生成迁移逻辑Add-Migration [自定义迁移名称,如Modify_User_Update_Phone_Length] - 打开新生成的迁移文件,检查
Up、Down方法逻辑是否符合预期:如果是扩大字段长度、新增可空字段这类无风险操作,自动生成的逻辑直接可用;如果是缩小字段长度、修改字段类型这类可能涉及数据兼容的操作,需要先在修改逻辑前补充数据清洗/转换代码,避免执行时报错或丢失数据
- 验证逻辑无误后运行迁移即可:
Update-Database
错误操作的风险说明
- 已应用的旧迁移会在数据库
__EFMigrationsHistory表中留下执行记录,EF Core默认不会重复执行已记录的迁移,修改旧迁移的内容不会生效,反而会导致多环境迁移快照不一致,后续生成新迁移时会出现结构冲突 - Designer文件是EF Core自动生成的模型快照副本,手动修改极易出现结构不匹配问题,后续执行迁移命令会直接报模型校验错误
操作界面参考

内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

