找不到可执行的匹配命令“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.json
configuration:
{ "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.Tools和Microsoft.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); } }