【问题标题】:The term 'scaffold-dbcontext' is not recognized as the name of a cmdlet, function, script file, or operable program术语“scaffold-dbcontext”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
【发布时间】:2017-01-20 03:23:07
【问题描述】:

当尝试用 asp.net core 搭建脚手架时,这个命令

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

给出这个错误。

scaffold-dbcontext : 术语“scaffold-dbcontext”无法识别 作为 cmdlet、函数、脚本文件或可运行程序的名称。 检查名称的拼写,或者如果包含路径,请验证 路径正确,然后重试。在 line:1 char:1

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

我尝试了here 的解决方案,但它对我不起作用。

知道原因/治疗方法是什么吗?

【问题讨论】:

  • 确保 entityframework.tools 位于 project.json 的工具部分。

标签: entity-framework asp.net-core


【解决方案1】:
  1. 确保它在您的 project.json 文件“Microsoft.EntityFrameworkCore.Tools.DotNet”中可用:“1.0.0-preview3-final”。

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

这就是它的全部作用

【讨论】:

  • 实际上我通过安装 nuget 包来解决这个问题:Install-Package Microsoft.EntityFrameworkCore.Tools
  • @kepung - 在最近的 VS2017 更新后,我不得不这样做。奇怪的。感谢您的评论,因为它为我解决了问题。
【解决方案2】:

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

更新 NuGet 解决了该问题。

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

【讨论】:

    【解决方案3】:

    对我来说,一旦我也在包管理器控制台中运行,它显然就起作用了:

     Install-Package Microsoft.EntityFrameworkCore.Tools 
    

    还要确保:

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

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

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

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

    我可以通过在 VS 中将我的类库设置为 Startup project 来解决这个问题(不要问为什么,因为它看起来毫无意义,但它确实有效)。

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

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

    【讨论】:

    • 谢谢。您的解决方案仍然适用于使用 .net core 2.2 的 VS2019
    • 太糟糕了,微软在过去几个月里没有对此进行改进。我没想到我的答案会有这么大的帮助,只要它的某些部分似乎是一些奇怪的 IDE 行为的棘手解决方法......
    • 我遇到了错误:找不到名为 Microsoft.EntityFrameworkCore.SqlServer 的提供程序程序集。确保指定的名称正确并被项目引用。我还必须运行:Install-Package Microsoft.EntityFrameworkCore.SqlServer
    • @AhmedFaizan 实际上它是帖子中提到的软件包示例之一。很高兴它有帮助
    • NET Core 3.1 需要,但 mysql 官方文档不需要,必须安装它才能首先使用 mysql EF 内核搭建 mysql 数据库。当然谢谢。
    【解决方案4】:

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

    例如 C:\App\ProjectName:

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

    【讨论】:

      【解决方案5】:

      对我来说,这个错误是由于在连字符周围添加了额外的间距造成的,由于某种原因,这是从文档中的命令复制粘贴时添加的。删除间距固定它。

      导致错误:

      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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 对于我的类似问题,我不需要安装 Microsoft.EntityFrameworkCore.SqlServer.Design,我安装了其余的并且它运行正常。
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

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

          希望这会有所帮助。 :)

          【讨论】:

          • 我拥有所有 3 个,但我仍然收到“Scafford-DbContext 无法识别”错误。我尝试添加 Microsoft.EntityFrameworkCore.SqlServer.Design,但没有帮助。
          【解决方案9】:

          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
          

          您的 Server 值可能因您的数据库服务器名称而异。将 MyDatabase 替换为您的数据库名称,例如 masterOutputDirectory 到您想要新创建的脚手架类的位置,例如 Models 文件夹。

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-11-01
                • 2021-05-23
                • 2020-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多