我正在使用带有Microsoft.EntityFramework.Core
和SQLite的ASP.Net Core RC2来完成项目示例。
我已经按照本教程进行了操作: 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
配置:
{
"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%" ]
}
}
答案 0 :(得分:60)
实体框架核心1.0
您只需更新project.json文件的tools
部分即可包含此内容:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
这应该使dotnet ef
命令可用。
重要强>
我还应该注意,dotnet ef
命令仅在从包含project.json文件的同一目录运行时才可用。
实体框架核心1.1
如果在升级到Entity Framework Core 1.1后再次遇到此问题,请务必使用Microsoft.EntityFrameworkCore.Tools
版本Microsoft.EntityFrameworkCore.Tools.DotNet
替换1.1.0-preview4
依赖项。也没有必要保留imports
部分。有关此问题的更多信息,请参阅Entity Framework Core 1.1 release announcement blog post下的“升级到1.1”标题。
答案 1 :(得分:56)
实体框架核心1.1
如果您将VS2017与没有project.json文件的新.csproj项目一起使用,请添加此项
您需要编辑.csproj文件(在解决方案资源管理器中右键单击它,然后单击编辑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
答案 2 :(得分:38)
特定于VS2017 15.3或更高版本以及ASP.NET CORE 2.0或更高版本......
通过命令行或nuget包管理器为db provider安装nuget。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
将以下部分添加到.csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
在VS2017中通过命令行或nuget管理器安装设计时工具。
dotnet add package Microsoft.EntityFrameworkCore.Design
这将在项目目录的命令行中启用dotnet ef *。
在项目目录的命令行中启用dotnet ef *命令,
dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold
答案 3 :(得分:31)
从.NET Core 1.0切换到.NET Core 1.1+或2.x时,这是一个常见问题。
要解决此问题,您需要:
project.json
(适用于.NET Core 1.0)或<projectName>.csproj
(适用于.NET Core 1.1+&amp; 2.x)项目配置文件中手动添加对此程序包的引用。更具体地说,对于.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密钥或<ItemGroup>
元素,其中包含一个或多个现有DotNetCliToolReference
元素,只需将新元素添加到现有组中即可。
重要:除了执行上述步骤之外,您必须在项目根文件夹(包含项目文件的文件夹)中启动dotnet ef
命令,否则它将赢得&#39;工作。
有关该问题的其他信息和详尽说明,请参阅my blog post。
答案 4 :(得分:16)
我认为我找到了问题的准确解决方案 - dotnet:找不到匹配命令的可执行文件&#34; dotnet-ef&#34; ..
我在VS 2017版本15.5.3中使用dot net core 2.0
此错误的原因
导致此错误的原因是 Nuget 无法在该位置找到 解决方案文件。
解决方案: - 转到您拥有&#39; Startup.cs&#39;的目录。类 强>
答案 5 :(得分:12)
我必须添加Microsoft.EntityFrameworkCore.Tools。 DotNet 才能工作。 project.json文件的tools部分如下所示:
"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"
},
答案 6 :(得分:4)
如果您遇到此问题并使用CLI工具运行asp.net核心,您可以通过添加来解决它
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
进入xx.csproj文件,和
dotnet restore
。
然后你可以使用dotnet ef命令。
答案 7 :(得分:1)
不是在VS Package Manager控制台类型中打开单独的控制台窗口,而是运行以下命令:
添加迁移
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);
}
}
答案 8 :(得分:1)
在我的情况下,dotnet ef
不可用,并且在运行dotnet -h
时未显示在列表中。
我已使用以下命令全局安装了dotnet-ef,现在可以使用它了。但仍然不在列表中。
dotnet tool install -g dotnet-ef
答案 9 :(得分:0)
我正在使用一个单独的类库项目。在包管理器控制台中尝试并失败以上所有内容之后。我用命令提示符,它工作了!奇怪的。 但是,信用额转到this article。 如果您使用单独的类库项目,This是您的解决方案。
答案 10 :(得分:0)
在工具部分添加以下代码,
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview2-final",
"imports": "portable-net45+win8+dnxcore50"
}
}
这种代码格式解决了我的错误。
答案 11 :(得分:0)
默认情况下,添加NuGet Pkg时,它将作为PackageReference添加,这是错误的,因此请手动进行编辑
1-编辑.csproj文件
2-从“ PackageReference”中更改:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
to:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>