术语“ scaffold-dbcontext”未被识别为cmdlet,函数,脚本文件或可运行程序的名称


87

当尝试使用asp.net core搭建支架时,此命令

“ scaffold-dbcontext”数据源=(本地);初始目录= MyDb;集成安全性= True;“ Microsoft.EntityFrameworkCore.sqlserver -outputdir模型

给出此错误。

scaffold-dbcontext:术语“ scaffold-dbcontext”不能识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。在第1行:char:1 + scaffold-dbcontext“ Data Source =(local); Initial Catalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~ + + CategoryInfo: ObjectNotFound:(scaffold-dbcontext:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException

我在这里尝试过该解决方案,但对我不起作用。

知道原因/可能是什么?


确保entityframework.tools在project.json的工具部分中。
Tim Scriv '16

Answers:


216

对我来说,显然,一旦我还运行了Package Manager控制台,它就可以工作:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

另外请确保:

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

  • 在PM控制台的右上角选择正确的程序集作为命令的目标(我常常被它遗忘了……)

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

找不到名称为Microsoft.EntityFrameworkCore.SqlServer的提供程序程序集。确保指定的名称正确,并被项目引用。

我可以通过将类库设置为VS中的Startup项目来解决此问题(不要问为什么看起来没有意义,但它起作用了)。

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

完成所有这些操作后,您将可以Scaffold-DbContext使用适当的参数和连接字符串运行命令行。


2
谢谢你 您的解决方案仍然适用于使用.net core 2.2的
VS2019

糟糕的是,Microsoft在最近几个月中没有对此进行改进。我没想到我的答案会这么有用,而且只要它的某些部分似乎对某些奇怪的IDE行为而言都是棘手的解决方法……
AFract

我遇到了错误:无法找到名称为Microsoft.EntityFrameworkCore.SqlServer的提供程序程序集。确保指定的名称正确,并被项目引用。我还必须运行:Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan's

@AhmedFaizan实际上是帖子中提到的软件包示例之一。很高兴这很有帮助
AFract '19

1
NET Core 3.1要求,但mysql官方文档不是必需的,必须安装此软件,以便首先使用mysql EF core搭建mysql数据库。当然谢谢。
Leandro

16
  1. 确保在project.json文件“ Microsoft.EntityFrameworkCore.Tools.DotNet”:“ 1.0.0-preview3-final”中可用。

在此处输入图片说明

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

在此处输入图片说明

就可以了


9
实际上,我通过安装nuget包来解决此问题:Install-Package Microsoft.EntityFrameworkCore.Tools
kepung

@kepung-在最近的VS2017更新之后,我不得不这样做。奇。感谢您的评论,因为它为我解决了问题。
KSwift87 '18

10

确保以管理员身份运行VS,并已安装以下软件包:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools

1
对于我类似的问题,我不需要安装Microsoft.EntityFrameworkCore.SqlServer.Design,而我安装了其余的文件,它可以正常运行。
MinaMRM

@MinaMRM谢谢。有效!!
教父

9

有同样的问题。就我而言,我缺少一些依赖项,因此请确保您具有以下依赖项:

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools

在此处输入图片说明

希望这会有所帮助。:)


我拥有所有这3个,但仍然收到“无法识别Scafford-DbContext”错误。我尝试添加Microsoft.EntityFrameworkCore.SqlServer.Design,但这没有帮助。
Rod

1

如果您使用的是.NetCore 2.2,则在命令提示符或Git Bash上,以下命令对我来说就像是一种魅力。在运行命令之前,请确保您直接位于项目文件夹中。

例如C:\ App \ ProjectName:

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

1

我已经从NuGet软件包管理器中安装了Microsoft.EntityFrameworkCore.Tools,它在已安装的软件包中可见。但是我一直收到这个错误。

重新启动Visual Studio(2019 /版本16.4.4)已为我修复了它。


1

Scaffold命令是dbcontextEF中命令的一部分。以下是成功的详细信息scaffold

在此处输入图片说明

所需的包装参考:

<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值可能会因Db服务器名称而异。替换MyDatabase为您的数据库名称,master并将OutputDirectory其替换为您希望新创建的脚手架类(如Models文件夹)的位置。


1

确保使用正确的控制台“ Package Manager控制台”。还有一个“终端”控制台,看起来非常相似,但不适用于此命令。包管理器控制台可以在视图->其他Windows中找到(自Visual Studio 2019版本16.6.5起)


-1

最近,我遇到了另一个导致此错误的原因:NuGet本身已过时。

更新NuGet解决了该问题。

如果Devanathan的答案对您不起作用,请检查以确保NuGet本身是最新的。


-2

对我来说...从Microsoft文档复制粘贴命令时,由于某种原因,在连字符周围添加了额外的间距。

除去连字符可解决此问题:

错误:

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

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

https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/existing-db

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.