实体框架6更新 - 数据库因使用-IgnoreChanges创建的迁移失败

时间:2015-10-15 16:39:14

标签: c# entity-framework entity-framework-6 ef-migrations

我正在尝试创建一个特定于可能具有一个完全由EF管理的模型类的域的DbContext,以及另一个映射到数据库视图的模型类。为了确保EF不尝试创建已存在的视图,我只将视图添加到我的DbContext并运行以下命令:

Add-Migration InitialUnmanaged -IngoreChanges

这会创建一个空的Up和Down的迁移,这正是我想要的。我可以使用此迁移更新我的dev数据库,但每当我尝试添加包含我的EF托管模型类的第二个迁移时,我都会收到错误。

Add-Migration Initial
  

由于以下显式迁移未决,因此无法生成显式迁移:[201510151553565_InitialUnmanaged]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

问题是,我已经应用了显式迁移,我可以在我的MigrationHistory表中看到它。

  

MigrationId

     

201510151553565_InitialUnmanaged

任何人都可以帮助我理解为什么会这样,以及如何解决它?

2 个答案:

答案 0 :(得分:1)

我想出来了。

当我应用迁移时,它将迁移历史记录表放在与模型相同的默认架构中。但是,当我尝试将其回滚时,它正在查找已连接用户的架构中的迁移历史记录。由于它不存在,它认为数据库是版本0。

我创建了一个OracleDbConfiguration类来指定一个自定义HistoryContext,它指定了Migration History表的默认架构,并且我能够在应用迁移后按预期回滚。

我验证了我能够重新创建我的初始步骤并让它们按预期工作,因为我明确指定了迁移历史记录表的架构。

答案 1 :(得分:0)

删除迁移或只运行Update-Database以使实体重新同步。如果是空迁移,则数据库不会更改。