[英]Updating Detached Entity with Children creates Modified & Delete changes using EF Core
我有一个 API 调用需要使用 EF Core 更新实体及其子项,但数据库上下文在更改跟踪器中生成修改和删除更改,从而有效地更新子项,然后删除它们。
我在做什么?
我从 API 调用中得到一个 DTO,然后我从数据库中获取原始文件及其子项
var dbModel = Repository
.GetQueryable()
.Include(m => m.Children)
.FirstOrDefault(m => m.Id == dtoModel.Id);
然后我将 DTO map 到原始模型(使用自动映射器),然后调用更新方法
Mapper.Map(matterTeam, matter);
await Repository.UpdateAsync(matter);
然后,这将向下调用 UpdateAsync。
public override async Task<TEntity> UpdateAsync(TEntity entity, CancellationToken cancellationToken = default)
{
_dbContext.Attach(entity);
var updatedEntity = _dbContext.Update(entity).Entity;
await _dbContext.SaveChangesAsync(cancellationToken);
return updatedEntity;
}
我试过将实体 state 设置为已修改,但它仍会生成已修改和已删除的更改。
问题在于 Automapper。 它创建了一个新的集合,这就是 EF Core 的问题所在。
引用自 github
将 map collections 添加到现有 collections 的能力,而无需重新创建集合 object。将添加/更新/删除现有集合 object 中的项目,基于用户定义的集合通用项目和目标集合类型之间的等价性。源集合
我安装了 Nuget package,将配置注册为状态并将我的映射器更新为以下效果很好
CreateMap<ModelDto, Model>()
.EqualityComparison((m, o) => m.Id == o.Id);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.