无法在 VS 2017 .NET Core 上启用 Entity Framework 迁移
Posted
技术标签:
【中文标题】无法在 VS 2017 .NET Core 上启用 Entity Framework 迁移【英文标题】:Can't enable migrations for Entity Framework on VS 2017 .NET Core 【发布时间】:2017-05-15 04:51:50 【问题描述】:我刚刚安装了 VS 2017 并创建了一个新的 Core 项目。在里面,我补充说:
Microsoft.EntityFrameworkCore (1.1.0) Microsoft.NETCore.App (1.1.0)我还创建了一个名为 Models 的文件夹,其中包含一个类。然后,我进入 Package Manager Console 并执行 enable-migrations 以便 VS 为我创建所需的文件。但是,我得到了以下错误,而不是所需的文件。
术语“enable-migration”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证 路径正确,然后重试。
我应该在这里做什么?
我似乎不走运谷歌搜索。这是一个非常不寻常的组合(Core VS17 和 EF),因此几乎没有关于该主题的信息。一些指南谈到手动编辑 package.json 有点困难,因为 VS 2017 似乎升级了核心,因此 dotnet restore 不寻找它,而是寻找一个 xxx.csproj .
总之,我很困惑,很不确定如何解决这个问题。
【问题讨论】:
【参考方案1】:EF Core 不再有Enable-Migrations
命令。 “默认”启用迁移。使用Add-Migration
添加新的迁移。
关于包管理器命令is here的文档
【讨论】:
认真的吗?好吧,我想现在默认设置是件好事。但是我应该如何获取配置文件?我很懒,不想每次都用谷歌搜索或查找旧项目。我更喜欢 IDE 为我完成工作,呵呵。 对不起,我明白了。在您提供的链接中(因此 +1),提到了有关 Scaffold-DbContext 的内容。但是,执行该命令会导致相同的错误消息(除了 Enable-Migrations 变为 Scaffold-DbContext)。那怎么办? 你安装了Microsoft.EntityFrameworkCore.Tools
包吗? (该页面顶部的“安装”部分)
我忘记接受了。你应该戳我的,呵呵。谢谢。
在 NuGet 包管理器 Shell 中运行“Install-Package Microsoft.EntityFrameworkCore.Tools”对我有用(按照 Dmitry 提供的链接中的说明)。【参考方案2】:
我刚刚安装了Microsoft.EntityFrameworkCore.Tools
,然后我尝试执行enable-migrations
,然后我在VS2017中收到以下消息:
Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.
希望对你有帮助。
【讨论】:
我问这个问题已经有一段时间了,所以可能有些事情已经改变了。您使用的是哪个版本的框架?【参考方案3】:我在使用 Visual Studio 2017 和从 VS 2015 导入的项目时遇到了类似问题,EF 迁移不再工作。
通读 GitHub 上的文档后: https://github.com/aspnet/EntityFramework/issues/7031
我通过 Nuget 安装了这个包:
“Microsoft.EntityFrameworkCore”
它导致了多次下载/安装的级联效应。 安装完成后,重启 VS 2017,一切都恢复正常了。
两天后,在另一个 Visual Studio 2015 项目中,我遇到了同样的问题,并按照上述步骤解决了它,但后来我收到了这个新错误:
“类型违反了继承安全规则:'System.Net.Http.WebRequestHandler'。派生类型必须与基类型的安全可访问性相匹配或难以访问。”
我通过将项目框架升级到最新的“.NET Framework 4.6.2”解决了这个错误(可怕....但它没有任何进一步的问题)
我参考了 GitHub 上的这个文档: https://github.com/dotnet/corefx/issues/11100
【讨论】:
【参考方案4】:正如其他人之前提到的,启用迁移已过时并且无论如何都已打开,您可以使用 Add-Migration InitialCreate。
我要补充一点,您确实不需要向项目添加更多包,因为它已经引用了 Microsoft.AspNetCore.All 元包中的必要程序集。
您还可以使用控制台(取决于您的操作系统的 cmd/shell)代替 PM power shell 控制台。为此,您需要添加对 dotnet 工具的引用:编辑您的项目文件(右键单击它并选择“编辑 .csproj” - 并在 ItemGroup 中添加以下引用:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0"></DotNetCliToolReference>
然后在控制台输入dotnet ef migrations add InitialCreate
Add Migration in .NET Core
.NET Core CLI
【讨论】:
【参考方案5】:已解决
-
右键单击项目,然后单击选项:管理 NuGet
包裹;在 Browse 中,查找 EntityFramework 插件,安装它,
然后重新启动 Visual Studio。
创建一个继承自 DbContext 的 MyDbContext 类。
在工具中> NuGet 包管理器> 包管理器控制台
启用迁移
添加迁移 InitialModel
【讨论】:
为你的答案添加一些格式,它看起来很棒[【参考方案6】:转到工具->NuGet 包管理器->包管理器控制台
写
install-package EntityFramework
然后
enable-migrations
此命令在项目的整个生命周期中运行意味着您只需在项目中编写一次 但是,如果我们更改模型或添加另一个类或任何更改,我们可以使用此命令
add-migration migrationNameTest
'migrationNameTest' 是您要分配给它的迁移名称 但是要运行迁移 转到包管理器并运行
update-database
【讨论】:
【参考方案7】:-
在包管理器控制台中运行以下命令。
以管理员身份运行 Visual Studio。
Install-Package EntityFramework -IncludePrerelease
我的问题解决了。
【讨论】:
以上是关于无法在 VS 2017 .NET Core 上启用 Entity Framework 迁移的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core:在VS2017中搭建React.js + webpack + babel
无法使用 VS Code 在 Windows 机器上为 linux 构建 .Net core 3.0 项目
远程部署/调试 Visual Studio 2017 .NET Core