关于entityframework migration的问题

今天在弄项目的时候碰到一个问题,我在领域实体加了字段,但是运行Add-Migration生成的文件里up和down内容都是空的。然后我不信邪运行了以下Update-Database,结果数据库并没有添加到我刚增加的字段。

这时候我关掉vs,重启,又尝试去增加了个字段,运行Add-Migration后,生成的文件就只有我现在加个这一个字段更新。

问题来了,上次遗漏的就补不回去了吗,我不想重删整个数据库取重建。

我不知道设计者是怎么设计这个Add-Migration的。我理解这个东西应该很好设计才对。
每次执行Add-Migration的时候去比对数据库的scheme和代码的entity,把差异的列出来就好。但是事实好像不是这样的。数据库还有个MigrationHistory记录的莫名的什么东西。


现在先要解决的问题的是这个遗漏的字段怎么修补上去?

阅读 4.1k
3 个回答

数据库中的MigrationHistory表就是用来记录每次进行数据迁移的记录。你要检查下你的这个表中数据是否手动删除了?在检查下vs中数据迁移的时候自动生成的文件是否存在。比如:“20170831XXX.cs”

新手上路,请多包涵

粗暴一点:

  1. 直接删掉Migraiton文件夹
  2. Enable-Migrations -yourContextName
  3. Add-Migration Initial
  4. Update-Database

数据库中的确有_MigrationHistory表记录迁移
我的猜测是:
比如你的迁移文件夹是这样的
Migration_v1.cs
Migration_v2.cs (添加了字段abc)

当你弄出了v2版本的迁移,并执行了迁移,此时数据库中的_MigrationHistory记录了你现在的版本(v2)
但是你对v2不满意,手动删除了v2.cs,但是数据库中记录的版本还是(v2)

当你创建新的版本时
Migration_v3.cs (添加了字段efg)
迁移工具会先扫下数据库查看历史,最好只会生成添加字段efg的迁移

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进