BUG1:using + DbContext 释放资源问题
2020-12-1
using 关键词用法:
- 指令:导入命名空间,可指定该命名空间别名
- +static指令: 导入单个类中的成员
- 语句:为指定的变量/资源指定一个范围,在末尾自动调用Dispose来释放资源
DbContext 定义
- 一个实例代表与数据库的一个Session,可做增删改查等操作
- 是单元化和仓储模式的结合
问题:
在一个HTTP请求内,要多次查询数据库中不同的数据,但第二次查询时,触发异常。异常提示:The ConnectionString property has not been initialized.
提示后发现,在第二次开始调用后,发现Connection中的配置数据丢失。
DbConnection如下调用:
using(var conn = ApplicationDbContext.Database.GetDbConnection())
{
//todo:Do someting
}
原因:
在Web应用中,配置了Scoped类型的DbContext,生命周期为一个请求(请求开始-请求结束)。
由于使用了using语句,第一次调用结束后,系统自动调用Dispose方法对ApplicationDbContext的Connection进行了资源释放。
所以第二次调用时就会出错。因为这两次调用是在同一个请求内,用的是同一个DbContext的Connection。