以下过程的好处是无需对 DB 进行任何操作,__MigrationHistory 可以保持原样。如果您有多个具有不同版本结构的不同环境,它也将起作用 - 只要您有匹配的分支。
我将最后一次迁移变成了初始迁移。诀窍是使用最旧版本的代码和正在使用的数据库,用新的初始迁移替换其最后一次迁移并删除所有以前的迁移。较新的分支保留较新的迁移,因此在合并到旧分支后这些迁移仍然有效。
所以从 OLDEST 分支开始 - 通常是 PROD - 并执行以下操作:
- 删除除最后一次迁移之外的所有迁移
- 删除上次迁移中“Up”和“Down”方法中的迁移代码
- 将上次迁移的构建操作更改为“无”以让 EF 忽略它
- 更改活动连接以指向本地数据库数据库。
- 确保此本地 DB 数据库不存在
- 添加迁移初始
- 将创建的“初始”迁移中的向上和向下代码复制到最后一次迁移
- 删除初始迁移
- 将上次迁移的构建操作更改回“编译”
- 报到
- 合并更改
- 在 LocalDB DB 上的 DEV 分支中进行测试 - 它应该进行新的初始迁移以及后续迁移,没有问题
- 在最新数据库的主分支中测试 - 它不应该做任何事情
上面的注释仅在您不向迁移中添加 EF 自身不执行的内容时才有效。例如,如果您添加数据库视图等,那么新创建的迁移将不会获得这些,它只会获得 EF 根据您的代码生成的脚本。