EF Core:无法访问已处置的对象

时间:2019-07-19 12:26:53

标签: c# entity-framework ef-core-2.0

我使用DataContext。

Startup.ConfigureServices

        services.AddDbContext<DataContext>(options => options
            .UseLazyLoadingProxies()
            .UseSqlServer(connString));

我的班级的建设者:

    private readonly DataContext _dbContext;
    public TagService(DataContext dbContext)
    {
        _dbContext = dbContext;
    }

方法:

    public async Task UpdateTagAsync(TagUpdateDto tagDto)
    {
        var tag = _dbContext.Tags.Where(p => p.Id == tagDto.Id).FirstOrDefault();
        tag = _mapper.Map<TagUpdateDto, Tag>(tagDto, tag);
        tag.UpdatedAt = DateTime.Now;
        _dbContext.Tags.Update(tag);
        await _dbContext.SaveChangesAsync();
    }

然后我通过以下方式调用此方法:

        TagDisplayDto tagDto = _service.GetTag(id);

        TagUpdateAPI tagForUpdate = _mapper.Map<TagUpdateAPI>(tagDto);
        jsonPatchDocument.ApplyTo(tagForUpdate);

        TagUpdateDto tagUpdateDto = _mapper.Map<TagUpdateDto>(tagForUpdate);
        _service.UpdateTagAsync(tagUpdateDto);

其中GetTag是:

    public TagDisplayDto GetTag(int id)
    {
        var tag = _dbContext.Tags.Where(p => p.Id == id).ProjectTo<TagDisplayDto>(_mapperConfig).FirstOrDefault();
        if (tag == null)
            throw new NullReferenceException();

        return tag;
    }

在调用方SaveChangesAsync上引发异常:

  

“无法访问已处置的对象。此错误的常见原因是处置从依赖关系注入中解析的上下文,然后稍后尝试在应用程序中的其他位置使用相同的上下文实例。如果调用Dispose( ),或将上下文包装在using语句中。如果您使用依赖项注入,则应让依赖项注入容器来处理上下文实例。\ r \ n对象名称:“ DataContext”。”

但更改确实已保存。为什么这样?

0 个答案:

没有答案