108

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

无法生成显式迁移,因为以下显式迁移处于挂起状态:[201203170856167_left]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

谁能帮我?

4

29 回答 29

91

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

于 2012-03-22T09:27:10.330 回答
65

我有同样的问题。显然,实体框架在无法连接到数据库时会生成此错误。因此,在搜索其他问题之前,请确保您能够访问它。

于 2015-07-31T09:37:17.987 回答
40

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

于 2014-02-07T03:12:19.460 回答
36

此错误也可能意味着迁移不再被识别。这发生在我更改了 Migrations.Configuration 中的 ContextKey 的值之后。解决方案是简单地更新数据库表“__MigrationHistory”中的 ContextKey(或者恢复我猜的 Configuration 类中的值)。应用程序中的 ContextKey 和命名空间应该匹配。

于 2015-10-11T19:41:52.907 回答
25

1.连接字符串/连接权限

再次检查连接字符串。

确保您正在连接的用户仍然有权读取[__MigrationHistory]并有权编辑架构。

您也可以尝试更改 App 或 Web 配置文件中的连接字符串,以使用Integrated Security (Windows Auth) 以您自己的身份运行 add-migration 命令。

例如:

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

此连接字符串将放入 DbContext 所在项目的 App.config 文件中。

2. 启动项目

您可以在命令行上指定 StartUp 项目,也可以右键单击带有DbContext,Configuration和 Migrations 文件夹的项目,然后选择Set as StartUp 项目。我是认真的,这实际上可以提供帮助。

在此处输入图像描述

于 2016-06-21T19:46:33.967 回答
10

有同样的问题,并且能够通过上述答案的一些提示来解决:

  • 在包管理器控制台中检查默认项目(指向具有迁移配置的项目
  • 确保启动项目的 web.config 具有有效的连接字符串(或
  • 确保具有迁移的项目具有带有有效连接字符串的 app.config / web.config
  • 检查数据库中的权限(对于您在连接字符串中配置的用户)

在包管理器控制台中使用“update-database -verbose”来获取迁移尝试连接到的更具体的信息。(帮助我发现我的启动项目设置不正确......)

于 2016-09-29T08:19:21.277 回答
7

如果你还没有使用Update-Database,你可以直接删除它。如果您已运行更新,则使用 回滚Update-Database -TargetMigration "NameOfPreviousMigration",然后将其删除。

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

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

于 2014-05-01T18:34:49.257 回答
7

遇到此问题时,请尝试将参数添加到您的 add-migration cmdlet。例如,指定启动项目以及连接字符串名称可以帮助 EF 找到您的目标数据库。

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

在哪里:

Delta_Defect_0973是您的迁移名称

your.namespace.ContextClassName是迁移文件夹中配置类的名称,以全名空间为前缀。

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

DeltaSQL是在 web.config 或 app.config 文件中定义的连接字符串的名称。

于 2016-05-05T19:16:36.077 回答
6

i solved same problem like this:

  • delete old migration file
  • update-database -force
  • Add-Migration AddedEntity
  • update-database
于 2019-04-07T12:59:50.273 回答
5

此错误意味着在执行另一个显式迁移之前需要提交待处理的迁移。你可以选择

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

在此之后,您可以再次开始“添加迁移...”

希望能帮助到你

于 2016-09-07T04:35:51.907 回答
4

只是我的两分钱:

我的场景:

  1. 我将本地数据库恢复到工作状态。
  2. 已经应用了迁移。
  3. 每当我尝试添加新迁移时,我都会收到关于我的 OP 中提到的待处理迁移的错误。

解决方案:

为了解决这个问题,我只是提供了更明确的参数:

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

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

于 2016-11-17T11:04:04.680 回答
3

有一个模棱两可的,所以错误。最好的方法是排除当前迁移文件并创建新的迁移(add-migration)文件,然后将新迁移的内容复制到排除的文件并再次包含它并运行update-database命令。

于 2018-03-06T14:29:22.853 回答
2

这不是很多人的答案,但是当 EF 无法连接到数据库时,它会抛出这个错误。如果您像我一样在家工作,请确保您仍然连接到您的 VPN!

于 2020-06-16T14:36:16.387 回答
1

我有一个更简单的问题。当我与工作站上连接的客户端站点建立 VPN 连接时,VS 错误地报告了此错误。问题是 DBMS 安全设置为仅接受来自我的真实本地 IP 的请求。只需关闭 VPN 即可解决问题。

于 2019-02-14T18:28:35.647 回答
1

对我来说,我从文件夹中删除了迁移文件(在你的情况下为“201203170856167_left”)Migrations,然后在包管理器控制台中运行以下命令

Add-Migration <Parameter>
Update-Database
于 2019-06-25T07:10:37.077 回答
1

提示:-Script如果您不确定,最好将开关用于迁移命令。它也确实有助于理解Update-Database实际做了什么。

我运行以下命令来更新数据库,然后我得到一个可以手动应用的脚本(或者只是在没有 -Script 标签的情况下再次运行它)。

因为Update-Database我会运行以下命令:

Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive

SQL_AzureLive我的配置中命名的连接字符串在哪里。

然后我可以验证 SQL 看起来是否正确,应用它并完成。正如许多其他人所说,如果连接字符串错误或无效,您将收到此错误。

于 2018-02-22T22:56:06.750 回答
1

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

于 2017-11-14T01:36:35.770 回答
1

我遇到了同样的问题,只能通过运行 Add-Migration 'MigrationName' -Force 来解决它

以-Force为重要部分。

于 2016-09-21T08:54:22.567 回答
0

对于我知道在运行 Add-Migration 时是最新的数据库,我也遇到了这个问题。只需再次运行 Add-Migration 命令即可解决。正如上面 Robin Dorbell 所建议的那样,怀疑存在连接问题。

于 2016-09-23T06:16:59.650 回答
0

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

于 2017-06-30T13:14:17.937 回答
0

旧帖子,但可能对某人有所帮助。对我来说,这是因为我重命名Assembly nameDefault namespace项目。所以我不得不ContextKey在表中更新为or_MigrationHisotry的新值。老实说,我不知道应该使用哪一个,因为对我来说两者都是一样的!Assembly nameDefault namespace

于 2020-10-28T13:16:26.323 回答
0

就我而言,只需将启动项目更改为包含我的迁移文件夹的项目,还要确保您在包控制台管理器中选择了相同的项目。

于 2021-09-06T17:02:23.963 回答
0

我做了另一种方式。我完全删除了数据库并在 vs 中再次运行“update-database”。

于 2018-05-04T18:44:59.143 回答
0

我也遇到过这个问题。它是在我创建新数据库时出现的,并且我的代码优先数据库迁移有待处理的更改,然后我尝试运行“Update-Database”命令。解决方案:运行“Add-Migration -MigrationName”命令为新数据库创建新迁移。然后运行“更新数据库”命令。

于 2016-09-15T06:47:41.323 回答
0

就我而言,我忘记在 Azure 的防火墙规则中添加我的 IP 地址,基本上是因为我无法连接到数据库,所以我收到了这个错误。因此,特别针对我的情况,我在 Azure 的数据库防火墙规则中添加了我的 IP 地址,并且一切正常。除此之外,可能是代理/互联网连接/数据库用户名密码/数据库连接字符串等问题。或者显然,您可能需要运行 Update-Database 命令的待处理迁移。

于 2020-01-24T03:18:55.397 回答
0

设想

  • 我在一个创建新数据库迁移的分支中工作。
  • 我已准备好从 master 更新,但 master 最近也进行了数据库迁移。
  • 我删除了我的分支的数据库迁移以防止冲突。
  • 我“从主人更新”。

问题

从 master 更新后,我运行“Add-Migration my_migration_name”,但收到以下错误:

无法生成显式迁移,因为以下显式迁移处于挂起状态:[201607181944091_AddExternalEmailActivity]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

因此,我运行“更新数据库”并收到以下错误:

无法更新数据库以匹配当前模型,因为存在待处理的更改并且禁用了自动迁移

解决方案

此时重新运行“Add-Migration my_migration_name”解决了我的问题。我的理论是,运行“更​​新数据库”使所有内容都处于“添加迁移”工作所需的状态。

于 2016-07-21T16:22:12.903 回答
0

从历史上看,我总是通过删除待处理的迁移来解决这个问题,或者如果只剩下 1 个并且这是最理想的,通过使用-f来重新创建它。

最近,这对我来说已经停止工作了。

第一次发生这种情况时,我重新启动了 Visual Studio,然后它让我继续。

第二次,它只有在我对项目运行清理后才起作用。尽管从资源管理器中删除了所有文件,但几乎就像保留了挂起的迁移一样。

于 2020-03-13T15:15:15.667 回答
-1

在从迁移恢复到另一个迁移之后,我遇到了完全相同的问题。

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

我需要删除“migration0”6,然后我才能强制创建“migration05”。这基本上意味着您只需要在目标迁移之后保留下一次迁移。

于 2017-11-16T08:16:05.823 回答
-1

就我而言(使用 MS Visual Studio),它就像重新启动 Visual Studio 一样简单。

于 2019-06-07T09:08:46.957 回答