实体框架迁移未检测到任何更改

时间:2013-09-16 17:52:24

标签: c# asp.net-mvc entity-framework migration

我成功运行Entity framework 6.0.0-alpha3直到今天。今天我决定更新到Entity framework 6.0.0-rc1,并按照指定的here运行我的迁移,我需要删除ef alpha1-alpha3之前的所有迁移并重新制作它们。

由于我的所有迁移都是由alpha3完成的,因此我决定放弃所有迁移(包括_MigrationHistory表),然后重新启用它。

我使用add-migration Initial -IgnoreChanges创建了初始迁移(其中包含空Up()Down()方法),然后我执行了update-database,我想,一切都还可以。好吧,不是。当我向模型中添加新类时,add-migration first会使用空Up()Down()方法创建迁移。

此外,之前,当我想访问尚未注册迁移的对象时,我收到一条错误消息,说我需要更新迁移。现在,当我尝试访问新对象时,它只是说"Invalid object name 'dbo.Notifications'."

我现在该怎么办?

4 个答案:

答案 0 :(得分:7)

EF使用数据库模型的快照(随迁移一起保存)来确定当前版本的数据库模型与上次迁移之间的更改。

add-migration Initial -IgnoreChanges命令使用数据库模型的快照创建迁移,但它忽略了以前数据库快照(即空数据库)的任何更改,因为您要告知这样做。

add-migration First命令查看先前的迁移(即Initial),并将当前数据库模型快照与Initial迁移的快照进行比较。显然这些快照是相同的,因此Up()Down()方法都是空的。

我认为您的问题的解决方案是在初始迁移中生成所有更改

add-migration Initial

答案 1 :(得分:1)

我遇到了一个问题,即实体没有认识到我的更改,即使我在程序集中添加了一个全新的实体类,它仍然看不到它。

当我记得一切正常时,我恢复了迁移,在迁移后删除了所有迁移文件,并再次运行Add-Migration。然后最终所有组合的变化出现了。

答案 2 :(得分:1)

有同样的问题。最终从数据库中删除了所有表,包括EFMigrationHistory,然后从我的解决方案中删除了migrations文件夹。
最后,在其他注释中提到了使用重新构建的批处理构建步骤。在我进行批处理构建之前,没有任何工作。我正在运行截至2018年11月18日的最新版VS 2017

答案 3 :(得分:0)

我也有空的上升/下降,原因是EF并不喜欢我的模型在他们的属性之上有[JsonProperty],因为我也使用了相同的模型用于json数据源。