"No executable found matching command dotnet-ef" EF Core 数据库优先错误

"No executable found matching command dotnet-ef" error with EF Core database-first

如您所知,最新版本的 Visual Studio 2017 放弃了 'project.json' 并使用 .csproj 代替。

我正在使用 RTM 版本并希望根据 this guide 从现有数据库生成模型。我在最后一步出错了:

The Entity Framework Core commands for the Package Manager Console don't yet support csproj-based .NET Core projects. Use the .NET Command Line Tools (i.e. dotnet ef) instead. For more details, see https://go.microsoft.com/fwlink/?linkid=834381.

报错后,我用它提到的link切换到dotnet ef。这是我的包管理器命令:

PM> dotnet ef dbcontext scaffold "Server=.;Database=Jumpstart;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer

然后错误又来了:

dotnet : No executable found matching command "dotnet-ef"

我用了help命令,发现dotnet没有叫ef的命令。

我只想从现有数据库生成模型。

学习本教程

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations

我遇到了同样的问题。刚刚在 .csproj 中编辑了 ItemGroup 部分

<ItemGroup>
   <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
</ItemGroup>

我的问题已通过将 tools 更改为:

得到解决
"tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
  },

然后执行这两个命令:

  1. dotnet restore - 恢复包
  2. dotnet ef 迁移

在 NetCore 2.0 上,您只需 运行 Add-Migrations

它会询问一个名字,仅此而已。请确保您在 appsettings.json

上有默认连接字符串

我解决了问题

在所有答案中都提到添加 Tools DotNet 但没有解决我的问题,因为错过了我在下面提到的一些命令

通过手动编辑 *.csproj 文件安装 EF Core .NET 命令行工具。

添加 Microsoft.EntityFrameworkCore.Tools.DotNet 作为 DotNetCliToolReference。请参阅下面的示例项目。

<ItemGroup>
   <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
</ItemGroup>

核心版本 2 更改了版本 但在那之后也应该运行 2个命令

然后 importatn 部分丢失所有答案(此命令解决了我在 visuall studio 2017 中的问题)

1 - 执行 dotnet add package Microsoft.EntityFrameworkCore.Design

2 - 执行 dotnet restore。如果还原不成功,可能是工具没有正确安装。

更多信息 https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

接受的答案是错误消息的最可能原因。但是,除了在 .csproj 文件中添加正确的引用外,还要 确保 Package Manager Console 中的当前目录指向 ASP.NET 核心项目 ,否则任何 dotnet ef 命令将失败并出现 OP 标题中提到的错误。