ASP.NET Core 5 中何时释放 DbContext 实例

When does a DbContext instance get disposed in ASP.NET Core 5

我正在使用推荐的方法通过依赖注入创建 DbContext 实例。

在Startup.cs-

services.AddDbContext<DashboardContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DashboardConnection")));

并在控制器中 -

private readonly DashboardContext db;
public AccountController(DashboardContext context)
{
    db = context;
}

我想知道这个实例什么时候被处置。

以前我们总是使用 using 语句来处理大括号 -

using (DashboardContext db = new DashboardContext())
{
    // Query
}

使用AddDbContext方法,默认会创建一个DbContext,生命周期为Scoped;这意味着,它的生命周期在当前请求范围内,并且会在当前请求完成后立即处理。

但是您可以通过为 contextLifetime 参数传递一个值来覆盖默认值,例如 -

services.AddDbContext<DashboardContext>(options => 
    options.UseSqlServer(
        Configuration.GetConnectionString("DashboardConnection")),
        ServiceLifetime.Transient);

进一步的细节检查 - AddDbContext

编辑-(回复@Dale 的评论):
考虑到 ASP.NET 核心 MVC 的整体架构,以及我们倾向于如何使用该框架,我会说(个人观点)通常对于大多数应用程序来说,最好坚持默认的 Scoped 生命周期.
在回答中,我只是想说明手动配置选项是为您准备的。当然,手动配置可能在某些用例或场景(取决于您设计自己的应用程序的方式)中发挥作用。