我在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/