代码首次迁移未见

时间:2014-06-24 20:05:52

标签: entity-framework ef-migrations

我是Entity Framework的新手,我无法将代码首次迁移到新数据库。我认为我的迁移已陷入糟糕状态。

我从一个现有的数据库开始,所以我使用

创建了一个初始的空迁移
  

Add-Migration Initial -IgnoreChanges

工作得很好。然后我添加了一个新实体并创建了另一个迁移

  

添加迁移New_Entity

工作得很好。我可以将这些迁移应用于一个甚至没有__MigrationHistory表的现有数据库,并且它将被正确更新。

快进几天,稍后提交几次。我现在有一个新的“干净”数据库,我想将迁移应用到。我进入Visual Studio,将我的app.config文件指向新数据库,运行

  

更新的数据库的

它告诉我

  

无法更新数据库以匹配当前模型,因为有   挂起的更改和自动迁移已禁用。要么写   待定模型更改为基于代码的迁移或启用自动   移民。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为   如果启用自动迁移,则为true您可以使用添加迁移   命令将挂起的模型更改写入基于代码的迁移。

但是,我没有任何待定的模型更改。什么也没有变。但是为了看看会发生什么,我跑了

  

添加迁移x

并创建了一个新的迁移,将模型中的每个实体添加到数据库中。基本上重新开始好像我没有迁移。所以我删除了那个,然后用-IgnoreChanges标志重新添加。这给了我另一个空白。如果再运行

  

更新的数据库的

它运行x迁移,但完全忽略了我几天前创建的迁移(InitialNew_Entity)。就像它不知道它们存在一样。

显然某些事情处于不利状态,但我不确定我能做些什么来取回它。我不能只删除并重新创建迁移,因为我需要一个空白的,只需要一个新实体。我不能暂时将实体注释掉,因为很多代码已经依赖它了。

我是如何陷入这种混乱中的?我该如何离开?

1 个答案:

答案 0 :(得分:0)

好吧,我到底了。事实证明,在某种程度上(我无法回想起在这一点上)Configuration.cs文件(在Migrations文件夹中)内的命名空间是否已更改。显然,这足以让系统混淆不看其他迁移。我一开始认为这只是因为它与已生成的实际迁移类不同步。但是,我尝试更改迁移类'命名空间以匹配Congiguration.cs的新命名空间值,但迁移仍然失败。它只在我将Configuration.cs恢复为旧的命名空间值后才起作用。

不确定这笔交易究竟是什么。也许最初的命名空间存储在迁移resx文件中,它注意到它们不再匹配了?