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

14

我正在尝试在我的Program.cs文件中,在.NET 6 minimal API模板下调用EF Core方法,并收到以下错误:

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();
}

// ...

我知道在较早版本的.NET Core中,我可以在Configure方法中获取DbContext,但是使用这种方法如何获取服务呢?


1
抛出了什么错误?您是否尝试先创建一个作用域 app.Services.CreateScope(),然后在该作用域上调用 GetService - Hazrelle
https://github.com/davidfowl/CommunityStandUpMinimalAPI/blob/main/TodoApi/Program.cs - ErikEJ
1个回答

27

但是为什么发生了这种变化? - ataraxia
在.NET 6中引入了@ataraxia的新替代托管方法,并且在新模板中默认使用它。因此,原始代码从未起作用。 - Guru Stron
请查看有关新的“最小API”的文档以获取更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0。 - lukeic
2
这些变化真让人头疼...我花了很多时间在谷歌上搜索如何设置asp.net core 6和entity framework core 6。感谢你的答案! - Harvey Darvey
IDbContextFactory<ApplicationDbContext> 的默认实现也可以被使用。我怀疑如果它还不存在,它会创建一个范围。 - Alex Buchatski
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接