The term 'scaffold-dbcontext' is not recognized as the name of a cmdlet, function, script file, or operable program
当尝试使用asp.net core搭建支架时,此命令
scaffold-dbcontext"Data Source=(local);Initial
Catalog=MyDb;Integrated Security=True;"
Microsoft.EntityFrameworkCore.sqlserver -outputdir Models
给出此错误。
scaffold-dbcontext : The term 'scaffold-dbcontext' is not recognized
as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify
that the path is correct and try again. At line:1 char:1
+ scaffold-dbcontext"Data Source=(local);Initial Catalog=MyDB;In ...
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (scaffold-dbcontext:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我在这里尝试过该解决方案,但对我不起作用。
知道原因/治愈可能是什么?
对我来说,显然,一旦我还运行了Package Manager控制台,它就会起作用:
1 | Install-Package Microsoft.EntityFrameworkCore.Tools |
另外请确保:
-
根据您的需要引用其他依赖项(例如Microsoft.EntityFrameworkCore,Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.SqlServer.Design ...)。
-
在PM控制台的右上角选择正确的程序集作为命令的目标(我常常被它遗忘了……)
我遇到的另一个问题:dbcontext位于单独的类库中,遇到以下错误:
Unable to find provider assembly with name
Microsoft.EntityFrameworkCore.SqlServer. Ensure the specified name is
correct and is referenced by the project.
我可以通过将类库设置为VS中的Startup项目来解决此问题(不要问为什么看起来没有意义,但它起作用了)。
后期编辑,还有其他事情要知道:您不能对仅针对.Net Standard的类库运行Scaffold-DbContext,还必须在其中启用netcoreapp,否则Scaffold-DbContext会抱怨。
要同时支持这两个目标,请编辑csproj:
代替
完成所有这些操作后,您将可以使用正确的参数和连接字符串运行
就可以了
确保以管理员身份运行VS并安装了以下软件包:
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.SqlServer.Design
- Microsoft.EntityFrameworkCore.Tools
有同样的问题。就我而言,我缺少一些依赖项,因此请确保您具有以下依赖项:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
希望这会有所帮助。 :)
确保使用正确的控制台" Package Manager控制台"。还有一个"终端"控制台,看起来非常相似,但不适用于此命令。包管理器控制台可以在视图->其他Windows中找到(自Visual Studio 2019版本16.6.5起)
所需的包装参考:
1 2 3 4 | <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"/> |
因此,我们的脚手架命令应如下所示:
1 | dotnet ef dbcontext scaffold"Server=localhost\\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory |
您的
我已经从NuGet软件包管理器中安装了Microsoft.EntityFrameworkCore.Tools,它在已安装的软件包中可见。但是我一直收到这个错误。
重新启动Visual Studio(2019 /版本16.4.4)已为我修复了它。
如果您使用的是.NetCore 2.2,则在命令提示符或Git Bash上,以下命令对我来说就像是一种魅力。在运行命令之前,请确保您直接位于项目文件夹中。
例如C:\ App \ ProjectName:
1 | dotnet ef dbcontext scaffold"Server=.\\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model |
最近,我遇到了另一个导致此错误的原因:NuGet本身已过时。
更新NuGet解决了该问题。
如果Devanathan的答案对您不起作用,请检查以确保NuGet本身是最新的。
对我来说...从Microsoft文档复制粘贴命令时,由于某种原因,在连字符周围添加了额外的间距。
除去连字符可解决此问题:
错误:
1 | Scaffold - DbContext"Server=(localdb)\\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models |
好:
1 | 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