术语“脚手架-dbcontext”不被认为是 cmdlet、函数、脚本文件或可操作程序的名称

当尝试使用 asp.net 核心搭建脚手架时,请执行以下命令

scaffold-dbcontext "Data Source=(local);Initial
Catalog=MyDb;Integrated Security=True;"
Microsoft.EntityFrameworkCore.sqlserver -outputdir Models

给出这个错误。

搭建-dbcontext: 不能识别术语“搭建-dbcontext” 作为 cmdlet、函数、脚本文件或可操作程序的名称。 检查名称的拼写,或者如果包含路径,则验证 路径是正确的,然后再试一次

+ scaffold-dbcontext "Data Source=(local);Initial Catalog=MyDB;In ...
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (scaffold-dbcontext:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

我已经尝试了解决方案 给你,但它不适合我。

知道病因是什么吗?

142031 次浏览
  1. 确保在 project.json 文件“ Microsoft.EntityFrameworkCore.Tools.DotNet”: “1.0.0-preview3-final”中可以使用这个文件。

enter image description here

  1. 在包管理器控制台中运行该命令

enter image description here

这样就行了

我最近碰到了这个错误的另一个原因: NuGet本身已经过时了。

更新 NuGet解决了这个问题。

如果 Devanathan 的回答对你不起作用,检查一下确保 NuGet本身是最新的。

对我来说,当我也在 Package Manager 控制台中运行时,它显然起作用了:

 Install-Package Microsoft.EntityFrameworkCore.Tools

还要确保:

  • 根据需要引用其他依赖项(例如 Microsoft. EntityFrameworkCore,Microsoft. EntityFrameworkCore. SqlServer,Microsoft. EntityFrameworkCore. SqlServer. Design...)。

  • 在 PM 控制台的右上角为您的命令选择正确的程序集作为目标(我经常因为忘记它而被愚弄...)

我遇到的另一个问题是: dbcontext 位于一个单独的类库中,我遇到了以下错误:

无法找到具有名称的提供程序集 确保指定的名称为 正确,并由项目引用。

我可以通过在 VS 中将类库设置为 启动项目来解决这个问题(不要问为什么,因为它看起来毫无意义,但它确实起作用了)。

后期编辑时,还需要知道: 不能只针对类库运行 Saffold-DbContext。NetStandard,您还必须在其中启用 netcoreapp,否则 Saffold-DbContext 会抱怨。 要同时支持这两个目标,编辑 csproj 以放置: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> 而不是 <TargetFramework>部分。

在所有这些之后,您将能够使用适当的参数和连接字符串运行 Scaffold-DbContext命令行。

——2022年更新——

我很高兴看到这篇文章仍然很有帮助,因为它收到了一些新的赞,但不是命令行脚手架,有一个更新的解决方案,为快乐的 VS 用户: 你可以依赖于扩展 EF 核心动力工具 的复古工程特性。

最近,我在所有的新项目中都使用了它,我发现它比原始命令行强大得多,并且它允许您保存执行设置(这将避免您创建。Bat). 当然,这是你的选择。

如果你使用的是 .NetCore 2.2,那么下面的 command对我来说就像是 Command Prompt (CMD)或者 Git Bash的魅力。
在运行 command之前,请确保您直接位于项目文件夹中。

例如 C: App Project 名称:

 dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model

对我来说,这个错误是由于在连字符周围添加了额外的间距,这是由于某种原因在从文档复制粘贴命令时添加的。去掉间隔就修好了。

导致错误:

Scaffold - DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models

解决办法:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

文档还说,如果收到此错误,请尝试重新启动 VisualStudio。

Https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

确保运行 VS 作为管理员并安装了以下软件包:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • 工具

我已经从 NuGet Package Manager安装了 Microsoft.EntityFrameworkCore.Tools,并且在安装的软件包中可以看到它。

重启 Visual Studio (2019/Version 16.4.4)为我修复了这个问题。

也有同样的问题。在我的例子中,我遗漏了一些依赖关系,所以请确保您有以下一个:

  • 实体框架核心
  • Microsoft.EntityFrameworkCore.SqlServer
  • 工具

enter image description here

希望这能有所帮助。 :)

Scaffold命令是 EF 中 dbcontext命令的一部分。以下是 scaffold命令成功的细节:

enter image description here

所需的包参考文献:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"/>

所以我们的脚手架命令应该是这样的:

dotnet ef dbcontext scaffold "Server=localhost\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory

Server值可能因数据库服务器名称的不同而有所不同。将 MyDatabase替换为数据库名称(如 masterOutputDirectory) ,使其位于新创建的脚手架类(如 Models文件夹)所需的位置。

确保您正在使用正确的控制台,“包管理器控制台”。还有一个“终端”控制台,看起来非常相似,但不适用于这个命令。包管理器控制台可以在视图-> 其他窗口中找到(从 VisualStudio2019开始,版本为。16.6.5)

如果您的解决方案有多个项目,并且 EF 文件不在启动项目中,请确保选择了正确的项目

Package Manager Console drop-downs

在 VS2022中,没有一个能正常工作。

但我安装了 EF

Dotnet 工具安装——全局 dotnet-ef

修改了代码;

“ Server = servername; Database = dbname; Perist Security Info = True; User ID = XXX; Password = YYY;”Microsoft. EntityFrameworkCore

我还得安装.Net 6.0主机包 Https://dotnet.microsoft.com/en-us/download/dotnet/6.0/runtime?cid=getdotnetcore