csharp 更新相关子实体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 更新相关子实体相关的知识,希望对你有一定的参考价值。

public override async Task<UserCategoryDto> Update(UserCategoryDto input)
        {
            CheckUpdatePermission();
            var existingEntity = await Repository.GetAll().Include(x => x.Items).FirstOrDefaultAsync(x => x.Id == input.Id);
            if (existingEntity != null)
            {
                // Update parent
                Repository.GetDbContext().Entry(existingEntity).CurrentValues.SetValues(ObjectMapper.Map<UserCategory>(input));

                // Delete children
                foreach (var existingChild in existingEntity.Items.ToList())
                {
                    if (input.Items.All(c => c.Id != existingChild.Id))
                        existingEntity.Items.Remove(existingChild);
                }

                // Update and Insert children
                foreach (var itemDto in input.Items)
                {
                    var existingChild = existingEntity.Items.SingleOrDefault(c => itemDto.Id > 0 && c.Id == itemDto.Id);

                    if (existingChild != null)
                    {
                        // Update child
                        var item = ObjectMapper.Map<UserCategoryItem>(itemDto);
                        Repository.GetDbContext().Entry(existingChild).CurrentValues.SetValues(item);
                    }
                    else
                    {
                        // Insert child
                        var item = ObjectMapper.Map<UserCategoryItem>(itemDto);
                        existingEntity.Items.Add(item);
                    }
                }

                await CurrentUnitOfWork.SaveChangesAsync();
            }

            return MapToEntityDto(existingEntity);
        }

以上是关于csharp 更新相关子实体的主要内容,如果未能解决你的问题,请参考以下文章

使用 EF Core 保存附加实体时如何删除子实体

从父实体更新子实体

Spring JPA:使用更新的子实体更新实体

在 EF 中更新父实体时如何添加/更新子实体

当微风子实体更新父实体状态不改变时

如何更新CoreData中另一个实体的子实体