我试图使用DbContext从存储库获得一些数据。出于某种原因,我一直得到System.ObjectDisposedException。在我的整个代码中,我没有处理任何东西,也没有在有关类中使用using语句。这是一个抛出异常的方法示例,尽管此存储库中的所有方法都会发生这种情况。
public async Task<List<Unternm>> GetCompanyBaseDataAsync(List<int> companyKeys)
{
return await _context.Set<Unternm>().Where(u => companyKeys.Contains(u.Baseid)).ToListAsync();
}
DB Context是这样注入的:
public class MasterDataRepository : IMasterDataRepository
{
private readonly IMapper _mapper;
private static IDataContext _context;
public MasterDataRepository(IMapper mapper, IDataContext context)
{
_mapper = mapper;
_context = context;
}
这是我的数据上下文的样子:
public class DataContext : DbContext, IDataContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
public DbSet<Arztlfd> Arztlfd { get; set; }
public DbSet<Arztstam> Arztstam { get; set; }
public DbSet<Oposten> Oposten { get; set; }
public DbSet<Unternm> Unternehmen { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseNpgsql(...);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
}
这是我得到的例外:
无法访问已处置的上下文实例。造成此错误的一个常见原因是,处理从依赖注入中解决的上下文实例,然后试图在应用程序的其他地方使用相同的上下文实例。如果在上下文实例上调用"Dispose"或将其包装在using语句中,可能会发生这种情况。如果使用依赖注入,应该让依赖注入容器处理上下文实例。对象名称:'DataContext'.
请问有人能帮忙吗?提前谢谢。
删除存储库中的静态内容。这是一个bug。你必须在你的启动中添加DI,像这样
services.AddDbContext<DataContext>(options => {
options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"));
否则你必须手动创建
private DataContext _context= new DataContext();