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

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


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

serviceProvider.GetRequiredService<MyDbContext>();


抛出一个异常,表明它不在范围内。

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

最佳答案

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

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

     ...
}


这将提供一个有作用域的dbcontext,当您完成使用它时,它将由作用域关闭自动处理。在Web请求期间,将为每个请求自动创建一个作用域,以便在请求结束时将其释放。

关于c# - 如何在ASP.NET MVC Core中获取 transient DbContext?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53710808/

10-09 07:21