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