繁体   English   中英

使用 EF Core 更新带有子实体的分离实体创建修改和删除更改

[英]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 的问题所在。

答案是添加Automapper Collection

引用自 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM