Entity framework 无法在实体框架中生成显式迁移

Entity framework 无法在实体框架中生成显式迁移,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我正在添加新迁移,但此消息显示: 由于以下原因,无法生成显式迁移 显式迁移挂起:[201203170856167_左]。应用 在尝试生成新文件之前挂起显式迁移 显式迁移 有人能帮我吗?它告诉您,您的应用程序中有一些未经处理的迁移,需要运行更新数据库,然后才能添加另一个迁移 您需要从package manager控制台运行“更新数据库”以将更改推送到数据库,或者您可以从迁移文件夹中删除挂起的迁移文件([201203170856167_left]),然后重新运行“添加迁移”根据您的编辑创建一个全新的

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

由于以下原因,无法生成显式迁移 显式迁移挂起:[201203170856167_左]。应用 在尝试生成新文件之前挂起显式迁移 显式迁移


有人能帮我吗?

它告诉您,您的应用程序中有一些未经处理的迁移,需要运行
更新数据库
,然后才能添加另一个迁移

您需要从package manager控制台运行“更新数据库”以将更改推送到数据库,或者您可以从迁移文件夹中删除挂起的迁移文件([201203170856167_left]),然后重新运行“添加迁移”根据您的编辑创建一个全新的迁移。

如果您没有使用
更新数据库
,您可以将其删除。如果已运行更新,请使用
更新数据库-TargetMigration“NameOfPreviousMigration”
将其回滚,然后将其删除

参考:


我直接从这里复制了这段文字:

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

此错误还可能意味着无法再识别迁移。我在Migrations.Configuration中更改了ContextKey的值后发生了这种情况。
解决方案只是更新数据库表“uu MigrationHistory”中的ContextKey(或者还原配置类中的值)。应用程序中的ContextKey和命名空间应匹配。

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

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

Delta_Defect_0973是迁移的名称

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

DeltaProject是包含web.config或app.config文件的主项目的名称

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

1。连接字符串/连接权限 再次检查连接字符串

确保与您连接的用户仍有权从
[\uu MigrationHistory]
读取内容,并有权编辑架构

您还可以尝试更改应用程序或Web配置文件中的连接字符串,以使用(Windows Auth)以自己的身份运行添加迁移命令

例如:

connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 
此连接字符串将位于DbContext所在项目的App.config文件中

2.启动项目 您可以在命令行上指定启动项目,也可以右键单击带有
DbContext
Configuration
和Migrations文件夹的项目,然后选择设置为启动项目。我是认真的,这确实有帮助


场景

  • 我在一家分支机构工作,在那里我创建了一个新的DB迁移
  • 我已经准备好从master更新,但是master最近也进行了DB迁移
  • 我删除分支的db迁移以防止冲突
  • 我是“从主机更新”
问题

从master更新后,我运行“addmigration my_Migration_name”,但出现以下错误:

由于以下原因,无法生成显式迁移 显式迁移挂起: [201607181944091_adderExternalMailActivity]。应用挂起的显式 在尝试生成新的显式迁移之前进行迁移

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

无法更新数据库以匹配当前模型,因为存在 已禁用挂起的更改和自动迁移

解决方案


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

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

  • 使用updatedatabase命令执行那些挂起的迁移
  • 删除那些挂起的迁移。最安全的方法是打开迁移文件夹,右键单击[201203170856167_left]>从项目中排除
  • 在此之后,您可以再次开始“添加迁移…”


    希望能有所帮助

    我也遇到了这个问题。当我创建了新的数据库,并且我的代码有了挂起的更改,首先是数据库迁移,然后我尝试运行“更新数据库”命令。解决方案:运行“addmigration-MigrationName”命令为新数据库创建新迁移。然后运行“更新数据库”命令

    我也有同样的问题,只能通过添加迁移“MigrationName”-Force来解决


    其中-Force是重要的一部分。

    对于一个运行添加迁移时知道是最新的数据库,我也遇到了这个问题。只需再次运行addmigration命令即可解决此问题。根据上面Robin Dorbell的建议,怀疑存在连接问题。

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

    • 在PackageManager控制台中,检查默认项目(指向具有迁移配置的项目)
    • 确保启动项目的web.config具有有效的connectionstring( 或
    • 确保迁移项目的app.config/web.config具有有效的connectionstring
    • 检查数据库中的权限(针对在connectionstring中配置的用户)
    • <
      Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose
      
      Add-Migration <Parameter>
      Update-Database