如何在ASP.NET MVC Core中获取瞬态DbContext?

时间:2018-12-10 17:36:31

标签: c# asp.net-core dependency-injection entity-framework-core

我在Startup.cs中具有以下内容:

services.AddDbContext<MyDbContext>(options => options.UseSqlite(Configuration.GetConnectionString("Sqlite")));

现在,我想启动一个具有短暂生存期的MyDbContext实例。这样做的原因是因为我在启动时填充了缓存。因此,如何获得我负责处理自己的MyDbContext实例?我手头有IServiceProvider

serviceProvider.GetRequiredService<MyDbContext>();

引发异常,表明它不在范围内。

我了解为什么会引发异常,但是我不确定解决该异常的最佳方法是什么。

1 个答案:

答案 0 :(得分:4)

您需要手动创建范围,如下所示:

using (var scope = serviceProvider.CreateScope())
{
    var scopedServices = scope.ServiceProvider; 
    scopedServices.GetRequiredService<MyDbContext>();

     ...
}

这将提供一个有范围的dbcontext,当您完成使用它时,它将由范围关闭自动处理。在网络请求期间,每个请求都会自动创建一个范围,以便在请求结束时将其丢弃。