c# - 如何在 ASP.NET MVC Core 中获取瞬态 DbContext?
问题描述
我在 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 - 如何调度进程
- python - Python 键盘模块在没有 root 的情况下无法工作
- python - How to sum up values according to indices in a different vector using keras / tensorflow?
- javascript - type script given error must supply value for formcontrol name id
- php - 为什么我不能用 _POST 读取值,但我可以用 _POST 检查 isset(并且它有效)
- amazon-web-services - 如何将文件从 S3 传输到某人的 SFTP 服务器
- hbase - java.lang.IllegalArgumentException:找不到表 My_Table 在 Apache Phoenix 中通过 PSQL 插入数据
- python - 如何按字典中列表的值排序
- node.js - Jenkins NodeJS 插件:无法执行“节点”
- ssl - Jetty - ipaccess per connector?