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

Nom*_*eed 90 entity-framework ef-migrations

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

无法生成显式迁移,因为以下显式迁移正在等待处理:[201203170856167_left].在尝试生成新的显式迁移之前应用挂起的显式迁移.

谁能帮我?

Lad*_*nka 79

它告诉您应用程序中存在一些未经处理的迁移,并且需要先运行Update-Database才能添加其他迁移.

  • 我想重新创建一个初始迁移?这阻止你这样做? (11认同)
  • 声明一个启动项目`-StartupProject ContentHub.Database``可能是必要的 (2认同)
  • `Update-Database`给出>由于有待处理的更改,无法更新数据库以匹配当前模型 (2认同)

Rob*_*ell 47

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

  • 我想提出的另一点是确保检查您的启动项目是否与您的数据库上下文的连接字符串.当我暂时改变我的启动项目并且没有意识到其他项目没有相同的连接字符串时,我遇到了这个问题. (8认同)

soc*_*man 31

您需要从包管理器控制台运行"update-database"以将更改推送到数据库,或者您可以从Migrations文件夹中删除挂起的迁移文件([201203170856167_left]),然后重新运行"add-migration"到根据您的修改创建全新的迁移.

  • 我删除了迁移文件并运行了 add-migration,但它仍然给出相同的错误。 (2认同)
  • 谢谢,有关删除待处理的迁移文件的提示是救命稻草 (2认同)

Tho*_*mas 25

此错误还可能意味着不再识别迁移.在Migrations.Configuration中更改了ContextKey的值后发生了这种情况.解决方案只是更新数据库表"__MigrationHistory"中的ContextKey(或者我想在Configuration类中恢复值).应用程序中的ContextKey和Namespace应该匹配.

  • 荒谬,但是没错.如果您更新了项目名称,或者您将项目(我的情况)拆分为少数并且您尝试将新项目从新项目添加到同一个数据库,则必须使用正确的ContextKey,您可以在Configuration构造函数中设置它(你必须使用目标数据库中__MigrationHistory表中的Context键) (2认同)

Jes*_*ess 15

1.连接字符串/连接权限

再次检查连接字符串.

确保您要连接的用户具有读取[__MigrationHistory]权限并具有编辑架构的权限.

您还可以尝试更改App或Web配置文件中的连接字符串,以使用Integrated Security(Windows Auth)以您自己的身份运行add-migration命令.

例如:

connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 
Run Code Online (Sandbox Code Playgroud)

此连接字符串将位于DbContext所在项目的App.config文件中.

2.启动项目

你可以在命令行上的启动项目,或者你可以右键点击与该项目DbContext,Configuration并迁移文件夹并选择设为启动项目.我很认真,这实际上可以提供帮助.

在此输入图像描述

  • 设置为启动实际工作. (5认同)
  • 我遇到了同样的问题,没有一个迁移命令有效。原来没有设置启动项目是罪魁祸首。设置解决了我的问题。 (2认同)

小智 8

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

  • 在包管理器控制台中,检查默认项目(指向具有迁移配置的项目)
  • 确保startup-proj具有带有有效连接字符串的web.config(或
  • 确保具有迁移的项目具有带有有效连接字符串的app.config/web.config
  • 检查DB中的权限(对于您在connectionstring中配置的用户)

在程序包管理器控制台中使用"update-database -verbose"以获取迁移尝试连接到的更具体的信息.(在我的情况下帮我找到我的启动项目没有正确设置......)

  • "确保startup-proj {...}"解决了我的问题.谢谢@flex (4认同)
  • 运行"update-database -verbose",注意到我的连接字符串坏了,哈哈.因此add-migration命令会给出错误的消息. (2认同)

Yve*_*hon 7

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

add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL
Run Code Online (Sandbox Code Playgroud)

哪里:

Delta_Defect_0973是迁移的名称

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

DeltaProject是使用web.config或app.config文件的主项目的名称.

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


nu *_*est 6

如果你还没有用过,Update-Database你可以删除它.如果您运行更新,然后使用它回滚Update-Database -TargetMigration "NameOfPreviousMigration",然后将其删除.

参考:http: //elegantcode.com/2012/04/12/entity-framework-migrations-tips/

我直接从这里复制了这个文本:如何撤消上一次Add-Migration命令?


yil*_*soy 6

我解决了同样的问题:

  • 删除旧的迁移文件
  • 更新数据库-力
  • 添加迁移添加实体
  • 更新数据库


Hun*_* Vu 5

此错误表示在执行另一个显式迁移之前需要提交待定迁移.你可以选择

  1. 使用Update-Database命令执行那些挂起的迁移
  2. 删除那些待处理的迁移.最安全的方法是打开Migrations文件夹,右键单击[201203170856167_left]>从项目中排除

在此之后,您可以再次启动"添加 - 迁移..."

希望能帮助到你