【问题标题】:Do I need to close EF core Dbcontext connection manually我是否需要手动关闭 EF 核心 Dbcontext 连接
【发布时间】:2021-08-17 02:57:59
【问题描述】:

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

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

使用依赖注入后,我直接使用 _dbcontext 进行 CRUD 操作,而不使用 using 范围。所以我需要知道在我执行 CRUD 操作后不使用 using 范围连接是否会自动关闭。

这是我使用 dbcontext 而不使用范围来获取数据并将数据保存到数据库的两个示例

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时必须使用使用范围

【问题讨论】:

标签: c# mysql entity-framework .net-core


【解决方案1】:

DbContext 的生命周期从创建实例开始,到释放实例结束。 DbContext 实例旨在用于单个工作单元

使用 Entity Framework Core (EF Core) 时的典型工作单元包括:

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

感谢@Genusatplay,此答案可在 Microsoft 文档中找到,如需进一步阅读,您可以参考 DbContext Lifetime, Configuration, and Initialization .在这个链接下你可以找到当我们使用依赖注入和没有依赖注入时dbcontext是如何工作的

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2013-10-22
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2019-06-10
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多