I'm following the docs in order to create an initial migration. When I execute
dotnet, I get the help section, meaning that the PATH works properly.
Then I try to execute the command below from the docs in console window:
dotnet ef migrations add InitialCreate
I get the following error:
Could not execute because the specified command or file was not found. Possible reasons for this include: * You misspelled a built-in dotnet command. * You intended to execute a .NET Core program, but dotnet-ef does not exist. * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
- I excluded the first item since I copied the command.
- I excluded the second item because the package Microsoft.EntityFrameworkCore.SqlServer is installed.
- I excluded the third item because I get the help section when invoking dotnet.
I'm googling the issue but since the version is new, there's not much to go on and/or it's drowning in similar issues from earlier versions.
I tried to forcibly install Microsoft.EntityFrameworkCore just in case it needs to be explicitly added. I ran into the error message telling me that the latest version to pick from is 2.2.6 and a downgrade is a no-go. I'm not sure how to install the version compatible with the SQL-package I have on my system already (and even less certain if that's right approach to kill this issue).
Detected package downgrade: Microsoft.EntityFrameworkCore from 3.0.0-preview6.19304.10 to 2.2.6. Reference the package directly from the project to select a different version.
Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview6.19304.10 ->
Microsoft.EntityFrameworkCore.Relational 3.0.0-preview6.19304.10 ->
Microsoft.EntityFrameworkCore (>= 3.0.0-preview6.19304.10)
Web -> Microsoft.EntityFrameworkCore (>= 2.2.6)
See the announcement for ASP.NET Core 3 Preview 4, which explains that this tool is no longer built-in and requires an explicit install:
The dotnet ef tool is no longer part of the .NET Core SDK
This change allows us to ship
dotnet efas a regular .NET CLI tool that can be installed as either a global or local tool. For example, to be able to manage migrations or scaffold a
dotnet efas a global tool typing the following command:
dotnet tool install --global dotnet-ef --version 3.0.0
The reason for the change is explained in the docs:
This change allows us to distribute and update
dotnet efas a regular .NET CLI tool on NuGet, consistent with the fact that the EF Core 3.0 is also always distributed as a NuGet package.
In addition, you might need to add the following NuGet packages to your project:
EDIT: If you are using a Dockerfile for deployments these are the steps you need to take to resolve this issue.
Change your Dockerfile to include the following:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env RUN dotnet tool install -g dotnet-ef --version 3.1.1 RUN export PATH="$PATH:/root/.dotnet/tools"
Also change your
dotnet ef commands to be