使用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
表中。
答案 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(基本上,创建一个新的开始)。
请记住事先进行必要的备份。