You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问DataContext时触发System.ObjectDisposedException问题求助

问题根因

你代码中的MasterDataRepository将_context字段声明为静态变量,是触发异常的核心原因:

  • 默认配置下,ASP.NET Core 注入的DbContext为Scoped生命周期,每一次请求创建一个新实例,请求结束后由DI容器自动释放
  • 静态变量的生命周期与应用进程一致,仅会在第一次构造MasterDataRepository时被赋值为当前请求的DbContext实例,第一次请求结束后该实例被释放,后续所有请求访问的都是这个已销毁的实例,因此会抛出ObjectDisposedException

修复方案

直接移除_context字段的static修饰符即可:

public class MasterDataRepository : IMasterDataRepository
{
    private readonly IMapper _mapper;
    // 删除static修饰符,每个仓储实例持有对应生命周期的上下文引用
    private readonly IDataContext _context;
    public MasterDataRepository(IMapper mapper, IDataContext context)
    {
      _mapper = mapper;
      _context = context;
    }
}

注意事项

  • 确保IDataContext在DI容器中的注册生命周期为Scoped,注册参考:
services.AddDbContext<IDataContext, DataContext>(options => 
    options.UseNpgsql("你的数据库连接字符串")
);
  • 若修改后仍有异常,检查MasterDataRepository的注册生命周期,不要注册为Singleton,需和DbContext的生命周期匹配,建议注册为Scoped。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:18:01