无法在新的 .NET Core 控制台应用程序中创建设置 EF Core 和创建迁移

问题描述 投票:0回答:1

我正在尝试创建一个简单的 .NET Core 控制台应用程序,通过 EF Core 访问数据库。无论我做什么,我都无法成功设置我的

Program.cs
来满足任何需要。尝试运行迁移时,我不断收到以下错误:

访问 Microsoft.Extensions.Hosting 时发生错误 服务。在没有应用程序服务提供商的情况下继续。错误: 入口点退出时没有构建 IHost。无法 创建类型为“”的“DbContext”。异常“无法解决” 类型服务 'Microsoft.EntityFrameworkCore.DbContextOptions`1[TestConsoleApp.ApplicationDbContext]' 尝试激活“TestConsoleApp.ApplicationDbContext”时。 尝试创建实例时抛出。对于不同的 设计时支持的模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728

如果有人想尝试和重现,这里是我正在执行的确切步骤(以及我的确切代码)。请注意,当使用

dotnet new webapi
从头开始创建 Web API 时,这一切都可以正常工作。

我正在运行以下命令来创建新的 .NET Core 8 控制台应用程序:

dotnet new console -n ConsoleApp

我安装了以下 NuGet 包:

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="8.0.2" />

然后,我创建一个

Entities
文件夹并向其中添加一个简单的
Product.cs
实体。

然后我创建一个

Data
文件夹并向其中添加一个
ApplicationDbContext
,如下所示:

public class ApplicationDbContext
{
    public 

ApplicationDbContext(DbContextOptions选项):基(选项) { }

    public DbSet<Product> Products { get; set; }
}

然后在我的

Program.cs
中我正在执行以下操作:

var services = new ServiceCollection();

// Add DbContext configuration
services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlite("Data Source=App.db");
});

// Build the service provider
using (var serviceProvider = services.BuildServiceProvider())
{
    // Resolve the DbContext from the service provider
    var dbContext = serviceProvider.GetRequiredService<ApplicationDbContext>();
    Console.WriteLine("Hello, World!");
}

然后,我尝试从项目的根目录运行以下命令:

dotnet ef migrations add InitialCreate -o Data/Migrations

错误消息表明应用程序无法构建

IHost
IWebHost
的实例。也许我在控制台应用程序的
Program.cs
中所做的并不能满足这个要求?

我从 Program.cs 中删除了所有内容,并将以下内容直接添加到 DbContext 中:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlite("Data Source=MyApp.db");
}

迁移实际上已经创建,并且一切似乎都在进行。但是,我仍然收到黄色警告/错误:“访问 Microsoft.Extensions.Hosting 服务时发生错误。在没有应用程序服务提供商的情况下继续。错误:入口点退出而没有构建 IHost。”

如果我添加 Console.ReadLine();到 Program.cs 时,调用 dotnet ef add migrations 命令会创建迁移,控制台应用程序保持正常运行,然后当我使用 ctrl+c 关闭它时,会出现相同的黄色警告/错误。我假设这是一个无害的错误。

我真的希望能够将我的 DbContext 放在一个中心位置,以便 WebAPI 或 ConsoleApp 可以访问它。这里的问题是 WebAPI 可以完成上下文选项注入,但控制台应用程序不能。

c# .net-core console-application
1个回答
0
投票

要使

.Net core
控制台应用程序与
Entity Framework Core
控制台应用程序一起使用,需要与
Microsoft.Extensions.Hosting
的通用主机一起使用。

有关如何实现通用主机的示例可以在 David Federman 的博客 post 中找到

© www.soinside.com 2019 - 2024. All rights reserved.