无法在VS 2017 .NET Core上启用Entity Framework的迁移

17
我刚安装了VS2017并创建了一个新的Core项目,在其中添加了以下内容:
  • Microsoft.EntityFrameworkCore(1.1.0)
  • Microsoft.NETCore.App(1.1.0)
我还创建了一个名为“Models”的文件夹,并在其中放置了一个类。 然后,我打开了包管理器控制台并执行了enable-migrations命令,以便VS为我创建所需的文件。 然而,我得到了以下错误信息,而不是所需的文件:

未将“enable-migration”识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请验证路径是否正确,然后重试。

我应该怎么办呢?
我已经尝试搜索,但没有找到相关信息。 这是一个非常不寻常的组合(Core VS17和EF),因此几乎没有关于此主题的信息。 一些指南讲述了手动编辑package.json文件,这有点困难,因为VS 2017似乎会升级Core,以便dotnet restore不再寻找它,而是寻找一个xxx.csproj
总之,我很困惑,不确定如何解决问题。
7个回答

25

EF Core不再有Enable-Migrations命令。迁移现在已经"默认启用"。使用Add-Migration添加新的迁移。

有关软件包管理器命令的文档在这里


真的吗?好吧,我猜这是默认设置是件好事。但是我该如何获取配置文件呢?我很懒,不想每次都要谷歌或查找旧项目。我更喜欢让IDE为我完成工作,呵呵。 - Konrad Viltersten
抱歉,我看到我表述不清楚了。在您提供的链接中(因此+1),提到了Scaffold-DbContext。然而,执行该命令会导致相同的错误消息(除了Enable-Migrations变成了Scaffold-DbContext)。那怎么办? - Konrad Viltersten
3
您是否已安装了 Microsoft.EntityFrameworkCore.Tools 包?(请参考该页面顶部的"安装"章节) - Dmitry
我忘记接受了。你应该戳我一下,呵呵。谢谢。 - Konrad Viltersten
在NuGet包管理器Shell中运行“Install-Package Microsoft.EntityFrameworkCore.Tools”对我有用(遵循Dmitry提供的链接中的说明)。 - kevindeleon

3

我刚刚安装了Microsoft.EntityFrameworkCore.Tools,然后尝试执行enable-migrations,但是在VS2017中我收到了以下消息:

Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.

希望这有所帮助。

我已经有一段时间没有问这个问题了,所以有些事情可能已经改变了。你正在使用哪个版本的框架? - Konrad Viltersten

2

正如其他人之前提到的,启用迁移已经过时并且已经自动开启,您可以使用Add-Migration InitialCreate。

我要补充的是,您不需要向项目添加更多包,因为它已经引用了Microsoft.AspNetCore.All元包中必要的程序集。

您还可以使用控制台(cmd / shell,取决于您的操作系统),而不是PM PowerShell控制台。要这样做,您需要添加对dotnet工具的引用:编辑您的项目文件(右键单击它并选择“编辑.csproj”),并在ItemGroup中添加以下引用:

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0"></DotNetCliToolReference>

然后在控制台中键入dotnet ef migrations add InitialCreate

在.NET Core中添加迁移

.NET Core命令行界面(CLI)


2

我曾遇到过与Visual Studio 2017及从VS 2015导入的项目类似的问题,EF Migrations不再起作用。

在GitHub上阅读了文档后: https://github.com/aspnet/EntityFramework/issues/7031

我通过Nuget安装了这个包:

"Microsoft.EntityFrameworkCore"

它引发了多次下载和安装的级联效应。安装后,重新启动VS 2017,一切恢复正常。

两天后,另一个Visual Studio 2015项目出现了同样的问题,我按照上述步骤解决了它,但随后出现了这个新错误:

"Inheritance security rules violated by type: 'System.Net.Http.WebRequestHandler'. Derived types must either match the security accessibility of the base type or be less accessible."

我通过将项目框架升级到最新的".NET Framework 4.6.2"来解决此错误(有点可怕....但没有进一步的问题)

我参考了GitHub上的这篇文档: https://github.com/dotnet/corefx/issues/11100


1
请去工具->NuGet程序包管理器->程序包管理器控制台
写入
install-package EntityFramework

然后。
enable-migrations

这个命令在整个项目的生命周期内运行,意味着你只需要在项目中写一次它。 然而,如果我们更改模型或添加另一个类别或任何其他更改,我们可以使用此命令。
add-migration migrationNameTest

"'migrationNameTest'是迁移的名称,您想将其分配给它 但是要运行迁移, 请前往包管理器并运行"
update-database

0

已解决

  1. 右键单击项目,然后选择“管理NuGet包”选项;在“浏览”中搜索EntityFramework插件,安装它,然后重新启动Visual Studio。
  2. 创建一个从DbContext继承的MyDbContext类。
  3. 在工具> NuGet程序包管理器> 包管理器控制台中
  4. 启用迁移
  5. add-migration InitialModel

给你的答案添加一些格式,它会看起来很棒。 - Mathews Sunny

0
请在程序包管理器控制台中运行以下命令:
  1. 以管理员身份运行Visual Studio。
  2. 运行以下命令:

Install-Package EntityFramework -IncludePrerelease

这样我的问题就解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接