找不到可执行的匹配命令“dotnet-ef”

我正在使用ASP.Net Core RC2与Microsoft.EntityFramework.Core和SQLite做项目示例。

我按照这个教程: https : //damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

但是,当我运行这个命令:

 dotnet ef migrations add FirstMigration 

我得到这个错误:

 No executable found matching command "dotnet-ef" 

这是我的project.jsonconfiguration:

 { "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0-rc2-3002702", "type": "platform" }, "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final", "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final", "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final", "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final", "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final", "Microsoft.Extensions.Logging": "1.0.0-rc2-final", "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final", "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final", "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final", "Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final" }, "tools": { "Microsoft.AspNetCore.Server.IISIntegration.Tools": { "version": "1.0.0-preview1-final", "imports": "portable-net45+win8+dnxcore50" } }, "frameworks": { "netcoreapp1.0": { "imports": [ "dotnet5.6", "dnxcore50", "portable-net45+win8" ] } }, "buildOptions": { "emitEntryPoint": true, "preserveCompilationContext": true }, "runtimeOptions": { "gcServer": true }, "publishOptions": { "include": [ "wwwroot", "Views", "appsettings.json", "web.config" ] }, "scripts": { "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] } } 

你只需要更新你的project.json文件的tools部分就可以包含这个:

 "Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview1-final", "imports": [ "portable-net45+win8+dnxcore50", "portable-net45+win8" ] } 

这应该使得dotnet ef命令可用。

重要

我也应该在这里注意到,只有在包含project.json文件的同一目录下运行它们时,才能使用dotnet ef命令。

entity framework核心1.1
如果在升级到Entity Framework Core 1.1之后再次出现此问题,请确保使用Microsoft.EntityFrameworkCore.Tools.DotNet 1.1.0-preview4版replaceMicrosoft.EntityFrameworkCore.Tools依赖1.1.0-preview4 。 也没有必要保留imports部分。 有关这方面的更多信息,请参阅Entity Framework Core 1.1发布公告博客文章下的“升级到1.1”标题。

如果你使用VS2017和没有project.json文件的新的.csproj项目,就可以添加这个function

您需要编辑.csproj文件(在解决scheme资源pipe理器中右键单击它,然后单击编辑whatever.csproj),然后将其粘贴到

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

礼貌: https : //github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967

从.NET Core 1.0切换到.NET Core 1.1+或2.x时,这是一个常见问题。

要解决这个问题,你需要:

  • 使用NuGet获取Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet包库。
  • project.json (对于.NET Core 1.0)或者<projectName>.csproj (对于.NET Core 1.1+和2.x)项目configuration文件中手动添加对此包的引用。

更具体地说,对于.NET Core 1.0项目,添加如下内容:

 "tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0" "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0" } 

对于.NET Core 1.1+和.NET Core 2.x项目,请添加以下内容:

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

如果您已经有一个tools json键或一个带有一个或多个现有DotNetCliToolReference元素的<ItemGroup>元素,只需将新元素添加到现有组。

重要说明 :除了执行上述步骤,您必须在项目根文件夹(包含项目文件的文件夹)中启动dotnet ef命令,否则将无法工作。

有关其他信息和问题的广泛解释,您也可以阅读这篇文章 。

我不得不添加Microsoft.EntityFrameworkCore.Tools。 DotNet工作。 你的project.json文件的工具部分将如下所示:

 "tools": { "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final", "Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final", "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final" }, 

特定于VS2017 15.3或更高版本以及ASP.NET CORE 2.0或更高版本…

通过命令行或nuget软件包pipe理器为数据库提供者安装nuget。

 dotnet add package Microsoft.EntityFrameworkCore.SqlServer 

将以下部分添加到.csproj

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

在VS2017中通过命令行或者nuget manager安装devise时间工具。

 dotnet add package Microsoft.EntityFrameworkCore.Design 

这可以在项目目录的命令行中启用dotnet ef *。

在项目目录的命令行中启用dotnet ef *命令,

 dotnet ef mgirations add Initial dotnet ef database update Initial dotnet ef dbcontext scaffold 

请享用…

如果遇到这个问题,用CLI工具运行asp.net核心,可以在<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />join<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />dotnet restore 。 然后你可以使用dotnet ef命令。

我正在使用一个单独的类库项目。 在包pipe理器控制台中尝试并全部失败。 我用命令提示符,它的工作! 奇怪的。 然而,信贷到这篇文章 。 如果你正在使用单独的类库项目, 这是你的解决scheme。

在visual studio 2017下,我需要从包pipe理器控制台运行这些命令

 install-package Microsoft.EntityFrameworkCore.SqlServer.Design Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp" 

而不是在VS软件包pipe理器控制台types中打开一个单独的控制台窗口并运行以下命令:

添加迁移

Add-Migration <migration name>

删除最后的迁移

Remove-Migration

迁移之前(或迁移申请):

Update-Database

当迁移已经应用时:

Update-Database -Migration <previous migration> -Context <db context name>

HTH

编辑 :您可能还需要在您的MVC核心项目中的以下类:

 public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext> { public YourDbContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<YourDbContext>(); builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name)); return new YourDbContext(builder.Options); } }