Удалить дочернюю запись сущности в ядре EF после сравнения - PullRequest
1 голос
/ 05 марта 2020

У меня есть дочерняя сущность Aggregate Entity с отношением один-ко-многим, а у дочерней есть список, содержащий родительский идентификатор. данные, поступающие из внешнего интерфейса, представляют собой список объектов, и, если они не отличаются от того, что происходит во внутреннем интерфейсе, я ничего не буду с этим делать. в противном случае я удалю то, что было удалено, и добавлю то, что было добавлено в таблицу.

enter image description here

Я новичок в EF CORE и пытаюсь чтобы применить этот логин в этом отношении.

if (child.list.SuccessorId == parent.vehicleCategoryId) => ignore;
if(!child.list.contain(parent.vehicleCategoryId)
 remove(parent.vehicleCategoryId) => //delete record with vehicleCategoryId
  else 
    add(child)

вот мои сущности.

public class VehicleCategory : LookupAggregateRoot<VehicleCategory>
{
    #region Constructor

    private VehicleCategory()
    {
        _successors = new List<VehicleSuccessorCategory>();
    }

    #endregion

    #region Data

    public virtual LocalizedText Name { get; set; }
    public virtual long Sequence { get; set; }
    private readonly List<VehicleSuccessorCategory> _successors;

    public IEnumerable<VehicleSuccessorCategory> Successors
    {
        get => _successors.AsReadOnly();
        set => throw new NotImplementedException();
    }

    #endregion

    #region Behaviour

    public void AddSuccessor(VehicleSuccessorCategory entrySuccessorCategory)
    {
        _successors.Add(entrySuccessorCategory);

    }

    public void RemoveSuccessor(VehicleSuccessorCategory entrySuccessorCategory)
    {
        _successors.Remove(entrySuccessorCategory);
    }
}


public class VehicleSuccessorCategory : ID365Entity<int>, IEnumerable
{
    #region Constructor

    public int Id { get; set; }
    public int SuccessorId { get; set; }
    public VehicleSuccessorCategory(int order)
    {
        Order = order;
    }

    #endregion

    #region Data

    public int Order { get; set; }

    #endregion

    public bool IsTransient()
    {
        throw new NotImplementedException();
    }


    public IEnumerator GetEnumerator()
    {
        yield return Id;
        yield return Order;
    }
}

Я пытался

 VehicleCategory vehicleCategory = _genericRepository.Get(aggregate.Id);
        foreach (var successorCategory in aggregate.Successors)
        {
            var successorCategoryToRemove =
                vehicleCategory.Successors.Where(e => e.SuccessorId == successorCategory.SuccessorId);
            foreach (var vehicleSuccessorCategory in successorCategoryToRemove)
                vehicleCategory.RemoveSuccessor(vehicleSuccessorCategory);
        }
...