You need to enable JavaScript to run this app. Asp.Net Core 5使用EF Core仓储模式触发AppDbContext已释放异常如何修复
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 5使用EF Core仓储模式触发AppDbContext已释放异常如何修复

修复方案

核心原因

该异常触发90%以上的概率是你注入的AppDbContext被代码手动提前释放了,而你配置的DI容器原本应当负责在请求结束后自动释放Context实例。

具体修复步骤

  • 检查你的IUowAsync<AppDbContext>实现类的代码,删除所有手动释放AppDbContext的逻辑
    绝大多数人写工作单元实现时会习惯性在Dispose方法中添加_dbContext.Dispose()代码,这段代码会在第一个仓储操作完成后就把上下文销毁,后续同一个请求的仓储操作就会触发释放异常,直接删掉这行手动释放Context的代码即可。
  • 检查所有仓储类的内部实现,避免两类错误:
    1. 不要在任何仓储方法中用using语句包裹AppDbContext操作,所有数据库操作复用构造函数注入的Context实例即可
    2. 所有异步仓储方法必须全程正确使用await关键字,不要用.Result、.Wait()这类同步阻塞调用,也不要未加await就直接返回Task对象
  • 排查你是否在Edit方法的第一个查询后调用了_uow的释放/提交方法触发了Context销毁,你的现有Edit代码中没有相关逻辑,但如果你的_absenceRepository.GetByIdAsync内部调用了Uow的释放逻辑,也会触发该问题

验证方法

你可以先注释掉LoadForEditAsync方法内的三行查询代码,直接返回View,如果没有再抛出异常,就能确认是Context被提前释放的问题,按上面的步骤排查Uow和仓储代码即可。
你的现有服务注册代码没有问题,不需要修改。

内容的提问来源于stack exchange,提问作者JOCKH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 01:54:08