访问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
相关产品推荐
相关产品推荐

