本文主要参考文章重置EntityFramework数据迁移到洁净状态,感谢哈~。可能是版本问题,文中所述操作跟我稍微有所出入,故在此做下记录。
注意,本人的IDE是JetbrainsRider,并非Visual Studio,但主要操作是通用的,主要是数据迁移命令格式的区别,Visual Studio用户也可参考。
第一步:备份数据库和代码
- 备份数据库
重置EFCore数据迁移,是一个危险操作,必须事先做好备份,否则后果自负。
我这里数据库用的是SqlServer,但所有数据库都是用本文的解决方案。
- 备份代码
第二步:删除__EFMigrationsHistory数据表
删除数据库中的__EFMigrationsHistory表。
第三步:删除项目中的数据迁移
把项目Migrations文件夹整个删除。
第四步:初始化数据迁移
终端Terminal中cd切换到解决方案中负责数据库的项目中(我这边是Domain)。
然后输入以下命令,初始化数据迁移:
dotnet ef migrations add v1
v1是你的迁移的名称。你可以按照你的喜好自定义。
数据迁移添加成功。
第五步:将数据迁移更新到数据库中
- 跳过建表命令
因为我们的数据库中已经存在表结构和数据,因此不能直接把v1的建表命令运行到数据中。
我们在Up和 Down函数最前面都加一个return。跳过建表和删表的操作(Down用于回滚,而回滚时我们也不希望表被删除)。
- 将数据迁移更新到数据库
在终端中输入以下命令,将数据迁移v1更新到数据库中。
dotnet ef database update v1
更新完成。
- 查看重置后的状态
去看下数据库,如下图,EFMigrationsHistory表被重新建出来了,并且迁移历史只有我们最新的v1:
搞定。