gpt4 book ai didi

asp.net-core - 如何使用新的 csproj 文件修复 "no executable found matching command "dotnet-ef""

转载 作者:行者123 更新时间:2023-12-02 08:46:10 26 4
gpt4 key购买 nike

我想将 SQLite 与 Entity Framework Core 结合使用。我正在关注这个官方教程:

.NET Core - New Database

它说要像这样修改project.json:

{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.1.0",
"type": "build"
}
},
"frameworks": {
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.1.0"
}
},
"imports": "dnxcore50"
}
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4"
}
}

我已经安装了 VS 2017 RC,Net Core 现在使用 csproj 文件而不是 project.json。

我将 csproj 修改为 Include="Microsoft.EntityFrameworkCore.Tools.DotNet"Version= "1.1.0-preview4-final" 但当我尝试命令 dotnet ef migrations add MyFirstMigration 我收到以下错误:

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

如何使用新的 csproj 修复此问题?

最佳答案

VS2017将于2017年3月7日正式发布。该文档涉及VS2015,它们尚未更新以反射(reflect)最新的VS 2017更改。像这样修改csproject解决了问题:

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.0" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version = "1.1.0-preview4-final"/>
</ItemGroup>

即使在此之后,当我尝试使用 CLI 命令运行第一次迁移时:

dotnet ef migrations add MyFirstMigration

我收到以下错误:“在‘TContext’上找不到无参数构造函数。向“TContext”添加无参数构造函数,或者在与“TContext”相同的程序集中添加“IDbContextFactory”的实现。”

根据this文档中,发生这种情况是因为设计时工具尝试自动查找应用程序如何创建 DbContext 类型的实例。如果 EF 找不到合适的方法来初始化您的 DbContext,您可能会遇到此错误。

我非常确定我已经设置了一个无参数构造函数,并且我能够使用以下 CLI 命令查看上下文:

dotnet ef database dbContext list

执行迁移的唯一方法是实现接口(interface) IDbContextFactory<TContext>在项目中。有关如何执行此操作的文档和示例基于 VS 2015。在 VS 2017 中 IDbContextFactory<TContext>.Create()想要一个DBContextFactoryOptions作为参数:

public class MyContextFactory: IDbContextFactory<MyContext>   
{
public MyContext Create(DbContextFactoryOptions options)
{
var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
optionsBuilder.UseSqlite("Filename=./mydatabase.db");

return new MyContext(optionsBuilder.Options);
}
}

关于asp.net-core - 如何使用新的 csproj 文件修复 "no executable found matching command "dotnet-ef"",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42345318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com