实体框架始终具有待定迁移

时间:2016-02-11 22:00:07

标签: entity-framework ef-code-first ef-migrations

使用Entity Framework 6,SQL Server数据库和代码首次迁移,我已经“快乐地”设置和运行迁移,但是我发现每次添加其他迁移时我都会先得到以下错误:

  

由于以下显式迁移未决,因此无法生成显式迁移:[201602090629398_Initial,201602090638322_FixSitePageColumns,201602110313468_RemoveRequiredTemplateId]。在尝试生成新的显式迁移之前应用挂起的显式迁移。“

如果我运行update-database -force,它会自然地抱怨脚本因为已经应用而失败。这是一个奇怪的组合再次签名,然后add-migration工作,我可以继续更新到最新的迁移。

随着时间的推移,每次添加的迁移都会增加“待定”迁移列表。

当已经应用了迁移HAS时,可能导致此“待处理”状态的原因是什么?我可以确认数据库已经更新,迁移存在于__MigrationHistory中,程序正在愉快地运行。

修改

我也只是运行get-migrations并返回以下内容:

  

PM>得到的迁移   检索已应用于目标数据库的迁移。   201602110313468_RemoveRequiredTemplateId   201602110311536_RemoveRequiredTemplateId   201602090638322_FixSitePageColumns   201602090629398_Initial

这里奇怪的事情(可能是一个红色的鲱鱼)是201602110311536_RemoveRequiredTemplateId不是我项目中的迁移,我认为它可能是我创建然后删除的,我没有隐含地应用它到数据库,但它在__MigrationHistory表中。

2 个答案:

答案 0 :(得分:2)

这发生在我身上,因为在运行Add-Migration时无法连接到数据库以查看已应用的迁移。我的密码没有存储在连接字符串中。解决方法是运行Add-Migration,指定完整的-ConnectionString和-SqlProvider

Add-Migration MigrationName -verbose -ConnectionString "data source=foo.database.windows.net;initial catalog=FOO_DB;user id=admin;password=`"REDACTED`";MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" 

答案 1 :(得分:-1)

从迁移数据库表中删除removerequiredtemplateid的条目,然后重新运行迁移过程。

(可选)完全删除表,删除所有迁移,重新运行enable-migrations,创建新的初始迁移并再次运行update-database(基本上,创建一个新的开始)。

请记住事先进行必要的备份。