我正在添加新的迁移,但此消息显示:
无法生成显式迁移,因为以下显式迁移正在等待处理:[201203170856167_left]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
谁能帮我?
它告诉您应用程序中存在一些未处理的迁移,并且需要先运行Update-Database
才能添加其他迁移。
只是我的两分钱:
我的情景:
解:
为了解决这个问题,我只提供了更明确的参数:
Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
我始终相信您可以在app.config文件夹中设置一个设置,以允许您默认此行为,因此您不必每次都提供显式参数。但是我不知道如何做到这一点。
有一种模棱两可的错误。最好的方法是排除当前迁移文件并创建新迁移(添加迁移)文件,然后将新迁移的内容复制到排除文件并再次包含它并运行update-database命令。
我有同样的问题,只能解决它运行Add-Migration'RemigrationName'-Force
随着-Force成为重要的一部分。
我的本地数据库没有填充或存在__MigrationHistory
。我手动创建了表,然后将该表中的数据从PROD迁移到我的本地数据库。这导致VS认为已经应用了迁移(他们曾经使用过)。
提示:如果您不确定,最好使用-Script
开关进行迁移命令。它也真的有助于理解Update-Database
实际上做了什么。
我运行以下命令来更新数据库,然后我得到一个我可以手动应用的脚本(或者只是在没有-Script标记的情况下再次运行它)。
对于Update-Database
,我会运行以下内容:
Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
其中SQL_AzureLive
是我的配置中的命名连接字符串。
然后我可以验证SQL看起来正确,应用它并完成。正如许多其他人所说,如果连接字符串错误或无效,您将收到此错误。
我解决了同样的问题:
脚本
问题
从master更新后,我运行“Add-Migration my_migration_name”,但得到以下错误:
由于以下显式迁移未决,因此无法生成显式迁移:[201607181944091_AddExternalEmailActivity]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
所以,我运行“Update-Database”并得到以下错误:
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移
解
此时重新运行“Add-Migration my_migration_name”解决了我的问题。我的理论是,运行“更新 - 数据库”使得所有状态都需要“添加 - 迁移”才能工作。
我也遇到过这个问题。当我创建新数据库时,我的代码优先数据库迁移有待更改,然后我尝试运行“Update-Database”命令。解决方案:运行“Add-Migration -MigrationName”命令为新数据库创建新迁移。然后运行“Update-Database”命令。
对于我知道在运行Add-Migration时最新的数据库,我也遇到了这个问题。只需再次运行Add-Migration命令即可解决问题。怀疑Robin Dorbell上面提到的连接问题。
当我突然重命名已经存在于db中的旧迁移类时,就发生了这种情况。我检查了VCS历史记录,确定并重命名。之后全部工作。
我有同样的问题。实际上,实体框架在无法连接到数据库时会生成此错误。因此,请确保在搜索其他问题之前能够访问它。
我做了另一种方式。我完全删除了数据库并再次运行“update-database”
我有一个更简单的问题。当我与工作站上连接的客户端站点建立VPN连接时,VS错误地报告了此错误。问题是DBMS安全性被设置为仅接受来自我的真实本地IP的请求。只需关闭VPN即可解决问题。
在我的情况下(使用MS Visual Studio),它就像重新启动Visual Studio一样简单。
对我来说,我从Migrations
文件夹中删除了迁移文件(在您的情况下为“201203170856167_left”),然后在Package Manager控制台中运行以下命令
Add-Migration <Parameter>
Update-Database
在从迁移恢复到另一个迁移后,我遇到了完全相同的问题。
就我而言,我将“迁移”从“迁移06”迁移到“迁移04”。
我需要删除“迁移0”6然后我才能强制创建“迁移05”。这基本上意味着您需要在目标迁移之后保留下一次迁移。
您需要从包管理器控制台运行“update-database”以将更改推送到数据库,或者您可以从Migrations文件夹中删除挂起的迁移文件([201203170856167_left]),然后重新运行“add-migration”到根据您的修改创建全新的迁移。
此错误还可能意味着不再识别迁移。在Migrations.Configuration中更改了ContextKey的值后,发生了这种情况。解决方案只是更新数据库表“__MigrationHistory”中的ContextKey(或者我想在Configuration类中恢复值)。应用程序中的ContextKey和Namespace应该匹配。
再次检查连接字符串。
确保您要连接的用户仍具有从[__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 project。我很认真,这实际上可以提供帮助。
有同样的问题,能够通过以上答案的一些提示解决:
在程序包管理器控制台中使用“update-database -verbose”以获取迁移尝试连接到的更具体的信息。 (在我的情况下帮我找到我的启动项目没有正确设置......)
如果你还没有使用过Update-Database
,你可以删除它。如果您运行更新,则使用Update-Database -TargetMigration "NameOfPreviousMigration"
将其回滚,然后将其删除。
参考:http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
我直接从这里复制了这个文本:How do I undo the last Add-Migration command?
遇到此问题时,请尝试向add-migration cmdlet添加参数。例如,指定启动项目以及连接字符串名称可以帮助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文件中定义的连接字符串的名称。
此错误意味着在您可以执行另一个显式迁移之前,需要提交待定迁移。你可以选择
在此之后,您可以再次启动“添加 - 迁移...”
希望能帮助到你