我正在添加一个新的迁移,但此消息显示:
无法生成显式迁移,因为以下显式迁移处于挂起状态:[201203170856167_left]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
谁能帮我?
我正在添加一个新的迁移,但此消息显示:
无法生成显式迁移,因为以下显式迁移处于挂起状态:[201203170856167_left]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
谁能帮我?
它告诉您应用程序中有一些未处理的迁移,并且需要运行Update-Database
才能添加另一个迁移。
我有同样的问题。显然,实体框架在无法连接到数据库时会生成此错误。因此,在搜索其他问题之前,请确保您能够访问它。
您需要从包管理器控制台运行“update-database”以将更改推送到数据库,或者您可以从 Migrations 文件夹中删除挂起的迁移文件([201203170856167_left]),然后重新运行“add-migration”到根据您的编辑创建一个全新的迁移。
此错误也可能意味着迁移不再被识别。这发生在我更改了 Migrations.Configuration 中的 ContextKey 的值之后。解决方案是简单地更新数据库表“__MigrationHistory”中的 ContextKey(或者恢复我猜的 Configuration 类中的值)。应用程序中的 ContextKey 和命名空间应该匹配。
再次检查连接字符串。
确保您正在连接的用户仍然有权读取[__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 文件中。
您可以在命令行上指定 StartUp 项目,也可以右键单击带有DbContext
,Configuration
和 Migrations 文件夹的项目,然后选择Set as StartUp 项目。我是认真的,这实际上可以提供帮助。
有同样的问题,并且能够通过上述答案的一些提示来解决:
在包管理器控制台中使用“update-database -verbose”来获取迁移尝试连接到的更具体的信息。(帮助我发现我的启动项目设置不正确......)
如果你还没有使用Update-Database
,你可以直接删除它。如果您已运行更新,则使用 回滚Update-Database -TargetMigration "NameOfPreviousMigration"
,然后将其删除。
参考: http ://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
我直接从这里复制了这段文字:如何撤消最后一个添加迁移命令?
遇到此问题时,请尝试将参数添加到您的 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 文件中定义的连接字符串的名称。
i solved same problem like this:
此错误意味着在执行另一个显式迁移之前需要提交待处理的迁移。你可以选择
在此之后,您可以再次开始“添加迁移...”
希望能帮助到你
只是我的两分钱:
我的场景:
解决方案:
为了解决这个问题,我只是提供了更明确的参数:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
我相信您可以在 app.config 文件夹中设置一个设置,以允许您默认此行为,因此您不必每次都提供显式参数。但是我不确定如何做到这一点。
有一个模棱两可的,所以错误。最好的方法是排除当前迁移文件并创建新的迁移(add-migration)文件,然后将新迁移的内容复制到排除的文件并再次包含它并运行update-database命令。
这不是很多人的答案,但是当 EF 无法连接到数据库时,它会抛出这个错误。如果您像我一样在家工作,请确保您仍然连接到您的 VPN!
我有一个更简单的问题。当我与工作站上连接的客户端站点建立 VPN 连接时,VS 错误地报告了此错误。问题是 DBMS 安全设置为仅接受来自我的真实本地 IP 的请求。只需关闭 VPN 即可解决问题。
对我来说,我从文件夹中删除了迁移文件(在你的情况下为“201203170856167_left”)Migrations
,然后在包管理器控制台中运行以下命令
Add-Migration <Parameter>
Update-Database
提示:-Script
如果您不确定,最好将开关用于迁移命令。它也确实有助于理解Update-Database
实际做了什么。
我运行以下命令来更新数据库,然后我得到一个可以手动应用的脚本(或者只是在没有 -Script 标签的情况下再次运行它)。
因为Update-Database
我会运行以下命令:
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
SQL_AzureLive
我的配置中命名的连接字符串在哪里。
然后我可以验证 SQL 看起来是否正确,应用它并完成。正如许多其他人所说,如果连接字符串错误或无效,您将收到此错误。
我的本地数据库没有__MigrationHistory
填充或存在。我手动创建了表,然后将该表中的数据从 PROD 迁移到我的本地数据库。这导致 VS 认为迁移已被应用(它们已经被应用)。
我遇到了同样的问题,只能通过运行 Add-Migration 'MigrationName' -Force 来解决它
以-Force为重要部分。
对于我知道在运行 Add-Migration 时是最新的数据库,我也遇到了这个问题。只需再次运行 Add-Migration 命令即可解决。正如上面 Robin Dorbell 所建议的那样,怀疑存在连接问题。
当我突然重命名数据库中已经存在的旧迁移类时发生了这种情况。我检查了 VCS 历史记录,确定并重新命名。之后都工作了。
旧帖子,但可能对某人有所帮助。对我来说,这是因为我重命名Assembly name
了Default namespace
项目。所以我不得不ContextKey
在表中更新为or_MigrationHisotry
的新值。老实说,我不知道应该使用哪一个,因为对我来说两者都是一样的!Assembly name
Default namespace
就我而言,只需将启动项目更改为包含我的迁移文件夹的项目,还要确保您在包控制台管理器中选择了相同的项目。
我做了另一种方式。我完全删除了数据库并在 vs 中再次运行“update-database”。
我也遇到过这个问题。它是在我创建新数据库时出现的,并且我的代码优先数据库迁移有待处理的更改,然后我尝试运行“Update-Database”命令。解决方案:运行“Add-Migration -MigrationName”命令为新数据库创建新迁移。然后运行“更新数据库”命令。
就我而言,我忘记在 Azure 的防火墙规则中添加我的 IP 地址,基本上是因为我无法连接到数据库,所以我收到了这个错误。因此,特别针对我的情况,我在 Azure 的数据库防火墙规则中添加了我的 IP 地址,并且一切正常。除此之外,可能是代理/互联网连接/数据库用户名密码/数据库连接字符串等问题。或者显然,您可能需要运行 Update-Database 命令的待处理迁移。
设想
问题
从 master 更新后,我运行“Add-Migration my_migration_name”,但收到以下错误:
无法生成显式迁移,因为以下显式迁移处于挂起状态:[201607181944091_AddExternalEmailActivity]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
因此,我运行“更新数据库”并收到以下错误:
无法更新数据库以匹配当前模型,因为存在待处理的更改并且禁用了自动迁移
解决方案
此时重新运行“Add-Migration my_migration_name”解决了我的问题。我的理论是,运行“更新数据库”使所有内容都处于“添加迁移”工作所需的状态。
从历史上看,我总是通过删除待处理的迁移来解决这个问题,或者如果只剩下 1 个并且这是最理想的,通过使用-f
来重新创建它。
最近,这对我来说已经停止工作了。
第一次发生这种情况时,我重新启动了 Visual Studio,然后它让我继续。
第二次,它只有在我对项目运行清理后才起作用。尽管从资源管理器中删除了所有文件,但几乎就像保留了挂起的迁移一样。
在从迁移恢复到另一个迁移之后,我遇到了完全相同的问题。
在我的情况下,我从“migration06”“targetedmigration”到“migration04”。
我需要删除“migration0”6,然后我才能强制创建“migration05”。这基本上意味着您只需要在目标迁移之后保留下一次迁移。
就我而言(使用 MS Visual Studio),它就像重新启动 Visual Studio 一样简单。