我使用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”。”
但更改确实已保存。为什么这样?