实体框架核心更新 - 特定于数据库的迁移

sti*_*n64 41 c# entity-framework-core

我试图弄清楚如何从nuget中的包管理器运行特定的迁移.

我试图运行:

 update-database -TargetMigration test32
Run Code Online (Sandbox Code Playgroud)

但我确实收到了这条消息:

找不到与参数名称"TargetMigration"匹配的参数.

我从微软文档到以前的ef版本读到了这个命令.

所以我不确定它在ef核心中是怎么回事.

Dmi*_*try 72

根据EF Core Docs,正确的参数名称是-Target(对于EF Core 1.1)或-Migration(对于EF Core 2.0)

所以在你的情况下:

update-database -target test32
Run Code Online (Sandbox Code Playgroud)

要么

update-database -migration test32
Run Code Online (Sandbox Code Playgroud)

"现代"方式是使用"常规"命令提示符和.NET Core CLI,以及命令之类的dotnet ef database update <target>

  • 我不同意你的第二条评论.:)程序包管理器控制台和.NET命令行工具都是同等合法的. (10认同)
  • 抱歉Brice :)我绝对同意这两者都是合法的,但PMConsole有很长的历史(从VS 2013甚至更早?),而CLI更新/年轻和跨平台,所以我用"现代"(啤酒)这个词 (2认同)
  • 没有目标参数 (2认同)

Pla*_*ind 36

德米特里给出的最佳答案有点不正确.没有参数-Target.唯一可以应用的参数是-Migration.因此,正确的答案是:

Update-Database -Migration test32
Run Code Online (Sandbox Code Playgroud)

  • 可以确认。核心2.0使用-migration。-target已不再协调 (4认同)
  • 这会将所有缺少的迁移应用到提供的迁移(“test32”),这正是您通常想要的,因为迁移可能会一个接一个地进行,并且必须按顺序运行。 (3认同)

Ste*_*ham 15

对于通过包管理器控制台的 EF Core 3.1:

dotnet ef database update YourMigrationName
Run Code Online (Sandbox Code Playgroud)


Sim*_*ser 5

只是想补充一下 Plastiquewind 提到的内容。在当前版本中,没有-target 参数。您必须使用-migration。此外,您还可以使用 -context 参数指定上下文(如果有多个上下文)。

Update-database -context MyContext -migration MyMigration
Run Code Online (Sandbox Code Playgroud)