简体   繁体   English

如何在 .NET 6 最小 API Program.cs 中访问 DbContext

[英]How to access DbContext in .NET 6 minimal API Program.cs

I am trying to call EF Core methods on application startup in my Program.cs file, using the .NET 6 minimal API template and get the following error:我正在尝试使用 .NET 6 最小 API 模板在我的 Program.cs 文件中调用应用程序启动时的 EF Core 方法并得到以下错误:

System.InvalidOperationException: 'Cannot resolve scoped service 'Server.Infrastructure.DbContexts.AppDbContext' from root provider.' System.InvalidOperationException:'无法从根提供程序解析范围服务'Server.Infrastructure.DbContexts.AppDbContext'。'

// ************** Build Web Application **************

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(configuration.GetConnectionString("AppDb:Postgres")));

// ...

// **************** Web Application *****************

var app = builder.Build();

var dbContext = app.Services.GetService<AppDbContext>(); // error thrown here

if (dbContext != null)
{
    dbContext.Database.EnsureDeleted();
    dbContext.Database.Migrate();
}

// ...

With earlier versions of .NET Core I am aware I can get the DbContext in the Configure method, but how would I get the service with this approach?使用早期版本的 .NET Core 我知道我可以在Configure方法中获取 DbContext,但是如何使用这种方法获取服务?

Scoped services require scope to be resolved.范围服务需要解决scope You can create scope via ServiceProviderServiceExtensions.CreateScope :您可以通过ServiceProviderServiceExtensions.CreateScope创建 scope :

using(var scope = app.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    // use context
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 .NET 6 Program.cs 中创建记录器 - How to create a Logger in .NET 6 Program.cs "如何在 .NET 6 中使用 Program.cs 文件" - How to use Program.cs file in .NET 6 ASP.NET 核心 Web API - 如何将 .NET 核心 5 中的 SetupSerilog 转换为 .NET 核心 6 Program.cs - ASP.NET Core Web API - How to convert SetupSerilog in .NET Core 5 to .NET Core 6 Program.cs 从 .NET Core Program.cs 访问配置 - Access Configuration from .NET Core Program.cs 如何从 ASP.NET Core 中的 Program.cs 访问 IWebHostEnvironment - How to access IWebHostEnvironment from Program.cs in ASP.NET Core ASP.NET Core 6 MVC:如何从 controller 访问 Program.cs 中定义的变量值? - ASP.NET Core 6 MVC : how to access a variable's value that is defined in Program.cs from a controller? 如何在 .NET 6 Program.cs 类中获取 ILoggerFactory 实例 - How to get ILoggerFactory instance in .NET 6 Program.cs class 如何在 .NET 6 的 Program.cs 中处理请求管道和服务注册 - How request pipeline and service registration is handled in Program.cs in .NET 6 如何仅在 .NET 6 Program.cs 中添加配置? - How to add configuration in .NET 6 Program.cs only? 如何在 ASP .NETCore 6 API 的 program.cs 中配置 cookie 并用于身份验证 - How to configure a cookie in the program.cs in ASP .NETCore 6 API and for Authentication
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM