我需要手动关闭EF核心Dbcontext连接吗



我的web应用程序使用了EF核心,为了初始化dbcontext,我使用了构造函数依赖注入。

private readonly ERPDB_GlobalContext _dbContext;
public ProductCategoryController(ERPDB_GlobalContext dbContext)
{
_dbContext = dbContext;

}

在使用依赖项注入之后,我直接将_dbcontext用于CRUD操作,而不使用using作用域。所以我需要知道,在我完成CRUD操作后,在不使用使用作用域的情况下,连接将自动关闭。

这是我使用dbcontext而不使用scope获取数据并将数据保存到数据库的两个例子

var category = _dbContext.ProductCategories.Where(c => c.CompanyId == cmp).ToList();
ProductCategories productCategory = new ProductCategories
{
ProductCateId = Guid.NewGuid(),
ProductCateName = model.ProductCateName,
CompanyId = companyId,
};
_dbContext.ProductCategories.Add(productCategory);
_dbContext.SaveChanges();

我读过MSdoc和一些文章,发现dbcontext对象被破坏后,dbcontext会自动关闭,否则连接不会手动打开(但对EF核心中什么是手动打开连接不太了解(

需要澄清的是,在使用依赖注入创建dbContext时必须使用作用域

DbContext的生存期从创建实例时开始,到释放实例时结束。DbContext实例设计用于单个工作单元

使用实体框架核心(EF核心(时的典型工作单元包括:

  1. 创建DbContext实例
  2. 通过上下文跟踪实体实例。实体被跟踪通过从查询返回被添加或附加到上下文中
  3. 根据需要对被跟踪的实体进行更改,以实现商业规则
  4. 调用SaveChanges或SaveChangesAsync。EF Core检测到所做的更改并将其写入数据库
  5. DbContext实例已释放

感谢@Genusatplay,这个答案可以在Microsoft文档中找到,要进一步阅读,你可以参考DbContext生存期、配置和初始化.在这个链接下,你可以找到当我们使用依赖注入和不使用依赖注入时,dbcontext是如何工作的

最新更新