无法在entity framework中生成显式迁移

我正在添加一个新的迁移,但是这个消息显示:

无法生成显式迁移,因为以下显式迁移未决:[201203170856167_left]。 在尝试生成新的显式迁移之前应用待处理的显式迁移。

谁能帮我?

它告诉你在应用程序中有一些未经处理的迁移,并且需要运行Update-Database才能添加另一个迁移。

您可能需要从软件包pipe理器控制台运行“update-database”来将更改推送到数据库,或者您可以从Migrations文件夹中删除暂挂的迁移文件([201203170856167_left]),然后重新运行“add-migration”根据您的编辑创build全新的迁移。

我有同样的问题。 显然entity framework在无法连接数据库时会产生这个错误。 因此,在search其他问题之前,请确保您能够访问它。

这个错误也可能意味着迁移不再被识别。 在更改Migrations.Configuration中的ContextKey的值之后,发生了这种情况。 解决方法是简单地更新数据库表“__MigrationHistory”中的ContextKey(或者,我猜想恢复configuration类中的值)。

有同样的问题,并能够解决一些提示从上面的答案:

  • 在包pipe理器控制台中检查默认项目(指向具有迁移configuration的项目
  • 确保startup-proj有一个有效连接string(或
  • 确保具有迁移的项目具有带有有效连接string的app.config / web.config
  • 检查数据库中的权限(对于连接string中configuration的用户)

在程序包pipe理器控制台中使用“update-database -verbose”以获取迁移尝试连接到的更多特定信息。 (帮我找出我的启动程序没有正确设置…)

如果您尚未使用Update-Database ,则可以将其删除。 如果您运行了更新,请使用Update-Database -TargetMigration "NameOfPreviousMigration"将其Update-Database -TargetMigration "NameOfPreviousMigration" ,然后将其删除。

参考: http : //elegantcode.com/2012/04/12/entity-framework-migrations-tips/

我从这里直接复制这个文本: 我如何撤消最后的添加迁移命令?

此错误意味着在执行另一个显式迁移之前,需要提交未完成的迁移。 你可以select

  1. 使用Update-Database命令执行那些正在进行的迁移
  2. 删除那些未决的迁移。 最安全的方法是打开Migrations文件夹,右键点击[201203170856167_left]>从项目中排除

在这之后你可以再次启动“Add-Migration …”

希望能帮助到你

1.连接string/连接权限

再次检查连接string。

确保您正在连接的用户具有从[__MigrationHistory]读取的权限,并且有权限编辑模式。

您也可以尝试更改应用程序或Webconfiguration文件中的连接string,以使用集成安全性 (Windows身份validation)作为自己运行添加迁移命令。

例如:

 connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 

此连接string将放在DbContext所在项目的App.config文件中。

2.启动项目

您可以在命令行上指定启动项目,或者右键单击带有DbContextConfiguration和迁移文件夹的项目,然后select设置为启动项目 。 我是认真的,这实际上可以帮助。

在这里输入图像说明

遇到此问题时,请尝试向您的添加迁移cmdlet添加参数。 例如,指定启动项目以及连接string名称可以帮助EF查找目标数据库。

 add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL 

哪里:

Delta_Defect_0973是您的迁移的名称

your.namespace.ContextClassName是您的迁移文件夹中Configuration类的名称,前缀为全名。

DeltaProject是您的web.config或app.config文件的主项目的名称。

DeltaSQL是您的web.config或app.config文件中定义的连接string的名称。

只是我的两分钱:

我的场景:

  1. 我将我的本地数据库恢复到工作状态。
  2. 已经有了迁移已经应用到它。
  3. 每当我尝试添加一个新的迁移,我得到了有关未决迁移的错误,如我所说的OP。

解:

为了解决这个问题,我只提供了更多的显式参数:

 Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose 

我相信你可以在你的app.config文件夹中设置一个设置来允许你默认这个行为,所以你不必每次都提供显式的参数。 但是我不确定如何做到这一点。

脚本

  • 我正在一个分支中创build一个新的数据库迁移。
  • 我准备从主服务器更新,但主服务器也有近期的数据库迁移。
  • 我删除我的分支的数据库迁移,以防止冲突。
  • 我“从主更新”。

问题

从主服务器更新后,我运行“添加迁移my_migration_name”,但出现以下错误:

无法生成显式迁移,因为以下显式迁移未完成:[201607181944091_AddExternalEmailActivity]。 在尝试生成新的显式迁移之前应用待处理的显式迁移。

所以,我运行“更新数据库”,并得到以下错误:

无法更新数据库以匹配当前模型,因为有未决的更改,并且禁用了自动迁移

此时重新运行“添加迁移my_migration_name”解决了我的问题。 我的理论是运行“更新数据库”得到的所有状态都需要为了使“添加迁移”工作。

我也遇到过这个问题。 这是当我创build新的数据库,我有我的代码优先数据库迁移的待定更改,然后我试图运行“更新数据库”命令。 解决scheme:运行“Add-Migration -MigrationName”命令为新的数据库创build新的迁移。 然后运行“更新数据库”命令。

我有同样的问题,只能解决它运行Add-Migration'MigrationName'-Force

与 – 力量是重要的部分。

我也遇到了这个问题,因为我知道运行Add-Migration的数据库是最新的。 通过简单地再次运行Add-Migration命令解决。 如上面Robin Dorbell所build议的那样,怀疑连接问题。

当我突然重命名已经存在于db中的旧迁移类时发生了这种情况。 我检查了VCS的历史,确定并重新命名。 所有工作之后。

我的本地数据库没有__MigrationHistory填充,或现有的。 我手动创build了表,然后将该表中的数据从PROD迁移到本地数据库。 这导致VS认为迁移已经被应用(他们曾经)。

刚从迁移转移到另一个时,我遭受了同样的问题。

在我的情况下,我“迁移”从“migration06”到“migration04”。

我需要删除“migration0”6,然后我能够强制创build“migration05”。 这基本上意味着你需要保持目标之后的下一次迁移。