无法在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
- 使用Update-Database命令执行那些正在进行的迁移
- 删除那些未决的迁移。 最安全的方法是打开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.启动项目
您可以在命令行上指定启动项目,或者右键单击带有DbContext
, Configuration
和迁移文件夹的项目,然后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的名称。
只是我的两分钱:
我的场景:
- 我将我的本地数据库恢复到工作状态。
- 已经有了迁移已经应用到它。
- 每当我尝试添加一个新的迁移,我得到了有关未决迁移的错误,如我所说的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”。 这基本上意味着你需要保持目标之后的下一次迁移。