添加新迁移时,EF Data迁移不会检测更改

Mou*_*lde 36 entity-framework ef-migrations

我首先使用Entity Framework 5.0数据迁移和代码.当我向模型添加新字段并在包管理器控制台中执行以下命令时.

 "Add-migration AddedField"
Run Code Online (Sandbox Code Playgroud)

我得到的只是一个名为"n_AddedField"的空迁移,up和down方法不包含任何逻辑.

我尝试了很多东西,重新安装EF nuget包,清理我的解决方案,重建,手动删除所有生成的文件和目录.

然后我决定废弃我的所有迁移并重新开始,然后它变得奇怪.删除所有迁移和数据库中的迁移历史表后,我使用CreateDatabaseIfNotExists初始化程序重新创建了数据库.完成此操作后,我应该能够创建一个新的初始迁移.但是当我尝试创建新的迁移时,我收到一条错误消息,指出存在待定迁移,并列出了我刚从项目中删除的所有迁移.

我不知道为什么以及EF如何回忆这些迁移.我甚至尝试搜索文件内容,查看迁移是否保存在其他地方或其他地方.但没什么......

当scott hansleman演示在舞台上时,数据迁移看起来非常整洁,但对于实际工作,我开始寻找替代方案.

当项目开始时,我们使用的是EF 4.x并且稍后将其切换到5.0,但是由于交换机我成功添加了一堆迁移.

有谁知道如何解决这个问题?基本上我只是希望能够添加迁移,并生成带有更改的sql脚本.

Sha*_*son 37

我有一个类似的问题,没有找到新的迁移,所以update-database无论我做了什么,都给了我以下错误:

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
You can use the Add-Migration command to write the pending model changes to a code-based migration.
Run Code Online (Sandbox Code Playgroud)

执行"批量清理"解决了我的问题,建议EF使用来自当前所选"解决方案配置(例如DEBUG)"之外的文件夹中的旧/无效程序集.

要进行批量清理:

  1. 选择 Main Menu -> Build -> Batch Build...
  2. 点击 Select All
  3. 点击 Clean

关闭对话框,重建并重新尝试迁移.

希望这有助于其他人.

  • 在我使用VS的所有年份中,我从未注意到Batch Build ..我认为Clean Solution会做同样的事情,但它没有..只有Batch Build> Clean工作.谢谢 (3认同)

nas*_*kew 26

哎呀.在我的情况下,我添加了一个未被任何其他实体引用的新根实体.结果只是代码首先没有理由为实体生成迁移.一旦我将代码添加到DbContext(一个dbset)中,它就像一个魅力.

  • 这也是我的问题。如果新实体没有被带有 `DbSet<T>` 的上下文引用,它们显然不会被选中。 (2认同)

小智 10

刚刚遇到同样的问题,但发现我的新字段被添加为成员变量而不是属性 - 它错过了{get; set;} part,这使得迁移跳过该字段.

可能不是你的情况,但它可能会帮助别人.


NSG*_*aga 8

你'不同步' - Db,迁移,代码 - 你可以期待各种各样的问题.

我这样做了million times(差不多:)而且效果很好 - 但是你需要保持稳定,并且要细心处理你正在做的事情.

你可以通读我所做的这个"总结" - 在某个地方中途开始(但也检查连接).

代码首先创建表

...如果它不起作用,我建议你制作一个小的"可重复"场景/模型 - 准确发布你所拥有的.

迁移的工作原理:

迁移与"迁移表"相关联.

何时Add-Migration运行 - 它会检查'现有数据库'结构和迁移表 - 并使'差异'(有时你也没有'向上''向下',因为它们也同步).

因此,每次"迁移"都是代码,现有迁移,数据库和迁移表之间的复杂差异.除了删除数据库之外没有其他任何东西肯定会重置 - Db'迁移'表可能还不够 - 这并不能保证完全'清理'(如果可能的话,我总是完全删除Db).您还需要删除代码迁移.

确保在相关之后/之前"编译"项目(最好使它们在配置中自动编译).

确保您的"连接"匹配.

一旦所有都同步 - 一切都应该很好 - 但你必须保持同步.除非你打算删除Db(测试) - 不要像那样删除迁移(你可以使用Update-Database -0(我认为)回到一些迁移(这是'零状态').


Chr*_*eau 8

我的问题是由以下原因引起的:

  1. 创建迁移(成功)
  2. 决定我要重新创建它,并删除迁移.cs文件
  3. 尝试重新生成它,并以空迁移DownUp功能结束

在这种情况下,我忘记删除ApplicationDbContextModelSnapshot.cs模型更改的条目。删除此文件中的新映射解决了我的问题,然后正确生成。

  • 谢谢你!我也忘记删除“ApplicationDbContextModelSnapshot.cs”中的条目,这导致新的迁移为空。 (2认同)

joe*_*dev 6

我遇到了一个与此类似的问题,即使用该-force标志打开add-migration来重新构架一个现有的迁移由于没有明显的原因而停止工作。

不管我做什么,我都会得到愚蠢的“由于以下显式迁移未决而无法生成显式迁移”的错误消息。在尝试了几乎所有我能想到的一切并且停止将笔记本电脑粉碎成碎片之后,我无奈地enable-migrations再次跑了出去,当然得到了“项目'Blah.Blah'中已启用迁移”消息。add-migration -force再次尝试,神奇地它正在工作。

我不知道它更改了什么-必须是源代码控制之外的一些用户设置/配置文件。希望这会帮助其他人。


Rya*_*ars 5

批量构建 -> 清洁选项对我不起作用。

我通过以下方式解决了这个问题:

  1. 使用“Add-Migration NameOfMigration”创建迁移
  2. 删除创建的迁移类的up和down函数的内容。
  3. 通过运行迁移脚本来更新数据库(这将使用“Update-Database -Verbose”向 _MigrationHistory 表中添加一行

Web 应用程序现在成功运行,因此基本上我遇到了一个问题,该问题仅通过添加元数据来解决。