实体框架迁移无法检测到POCO更新

34
我正在使用Entity Framework和Entity Framework迁移来实现使用代码优先和自动迁移的解决方案。
它曾经很好用,但突然间它停止检测我对POCO所做的更新。现在,当我添加一个新属性(非常简单的属性,比如年龄或电子邮件)并执行"Update-Database"时,什么都不会发生,并且它会给出这个消息:
"Specify the '-Verbose' flag to view SQL commands being executed during migration. Found 0 pending explicit migrations: []. Adding seed data (if Seed method overridden in Migrations Settings class)."
什么都没有被更新!
有人知道为什么会发生这种情况吗?

1
自动迁移启用标志仍然设置吗? - Betty
1
是的,我也遇到了一些问题,不得不重新安装它,我想知道是否因为我正在使用新的NuGet 1.6方法不在源代码控制中存储包。 - Betty
1
但是这里是我的解决方法:我使用了一个变通的方法,卸载了迁移包并重新安装它,然后运行了update-database命令,问题就得到了解决。 - Stacker
1
@Betty 我说的是一种解决方法而不是解决方案,我宁愿不把这个作为答案批准。我已经安装了最新的 NuGet 补丁,但偶尔仍会遇到这个问题。 - Stacker
1
我一直遇到同样的问题,但是是在使用模型优先时。我修改了我的模型,但是没有更新到数据库中...现在提到了这个问题,我是团队中唯一使用NuGet的人...我会回复你的。 - sebagomez
显示剩余7条评论
1个回答

2
这可能有两个原因:
  1. 代码中存在其他的DbContext,因此自动迁移无法确定使用哪个上下文。
  2. 有一些新的更改,导致模式和代码模型的比较循环,因此EF无法找到差异。
总的来说,自动迁移实现简单快捷,但不安全。在某些阶段,这样的迁移可能会失败。
几年前,我开发了一个基于Linq2SQL的小型ORM,名为AcroDB Library,它使用了SubSonic的自动迁移。与现在EF迁移几乎相同。在处理或更改少量数据的小型项目中非常完美,但当项目扩展到15个以上的表时,它变成了一场噩梦。这就是为什么微软最近宣布了代码驱动迁移。它们更安全,适用于大型项目。此外,您还可以查看Migrator.Net(到目前为止比EF更好)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接