尝试使用asp.net核心这个命令进行脚手架时
scaffold-dbcontext"数据源=(本地);初始 目录= MyDb;综合安全性=真;" Microsoft.EntityFrameworkCore.sqlserver -outputdir模型
给出了这个错误。
scaffold-dbcontext:术语' scaffold-dbcontext'不被承认 作为cmdlet,函数,脚本文件或可运行程序的名称。 检查名称的拼写,或者如果包含路径,请验证 路径是正确的,然后再试一次。在行:1个字符:1 + scaffold-dbcontext"数据源=(本地);初始目录= MyDB;在...... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(scaffold-dbcontext:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
我尝试过解决方案here,但它对我不起作用。
知道原因/治疗方法可能是什么?
答案 0 :(得分:50)
对我来说,一旦在Package Manager控制台中运行,它就可以正常工作
Install-Package Microsoft.EntityFrameworkCore.Tools
还请确保:
根据您的需要引用其他依赖项(例如Microsoft.EntityFrameworkCore,Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.SqlServer.Design ...)。
要在PM控制台的右上角选择正确的程序集作为命令的目标(我常常被它遗忘了……)
我遇到的另一个问题:dbcontext位于单独的类库中,遇到以下错误:
找不到名称为提供程序的程序集 Microsoft.EntityFrameworkCore.SqlServer。确保指定的名称是 正确,并由项目引用。
我可以通过将类库设置为VS中的Startup项目来解决此问题(不问为什么,但它可以工作)。
答案 1 :(得分:12)
答案 2 :(得分:12)
确保您以管理员身份运行 VS 并安装了以下软件包:
答案 3 :(得分:12)
有同样的问题。就我而言,我缺少一些依赖项,因此请确保您具有以下依赖项:
希望这会有所帮助。 :)
答案 4 :(得分:3)
Scaffold
命令是EF中dbcontext
命令的一部分。以下是成功完成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
根据您的Db服务器名称,您的Server
值可能有所不同。将MyDatabase
替换为您的数据库名称(例如master
和OutputDirectory
)到您想要新创建的脚手架类(例如Models
文件夹)的位置。
答案 5 :(得分:2)
我已经从NuGet软件包管理器安装了Microsoft.EntityFrameworkCore.Tools,它在已安装的软件包中可见。但是我一直收到这个错误。
重新启动Visual Studio(2019 /版本16.4.4)已为我修复了该问题。
答案 6 :(得分:1)
确保使用正确的控制台“ Package Manager控制台”。还有一个“终端”控制台,看起来非常相似,但不适用于此命令。包管理器控制台可以在视图->其他Windows中找到(自Visual Studio 2019版本16.6.5起)
答案 7 :(得分:0)
我最近遇到了这个错误的另一个原因:NuGet本身已经过时了。
更新NuGet解决了这个问题。
如果Devanathan的回答对您不起作用,请检查以确保NuGet本身是最新的。
答案 8 :(得分:0)
如果您使用的是.NetCore 2.2,则在命令提示符或Git Bash上,以下命令对我来说就像是一种魅力。在运行命令之前,请确保您直接位于项目文件夹中。
例如C:\ App \ ProjectName:
dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model
答案 9 :(得分:-1)
对我来说...从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/en-us/ef/core/get-started/aspnetcore/existing-db