Имея AggregateRoot и список дочерних сущностей, как вы сохраняете обновленный список потомков после удаления или обновления одного из них?
Это служба уровня приложения
async Task HandleAsync(RemoveChildRequest request)
{
Aggregate aggregate = await _aggregateRepository.GetByIdAsync(request.AggregateId);
aggregate.RemoveChild(request.ChildId);
await _aggregateRepository.Update(aggregate);
await _unitOfWork.CommitAsync();
}
Это агрегированный метод удаления дочернего элемента.
public virtual void RemoveChild(Guid ChildId)
{
Child kid = _children.Single(item => item.Id == ChildId);
_children.Remove(kid);
}
И это репозиторий. Агрегат, как и должно быть, имеет те же данные, но без дочернего элемента он был удален из коллекции.
Update(Aggregate aggregate)
{
await Session.UpdateAsync(aggregate, aggregate.Id);
}
Это моя конфигурация NHibernate
mapping
.HasMany<Children>(Reveal.Member<Aggregate>("Children"))
.Not.Inverse()
.Not.KeyNullable()
.Not.KeyUpdate()
.Cascade.Delete();
После завершения фиксации обновление для БД не выполняется.Каким-то образом я чувствую себя нормально, потому что я только удаляю запись из коллекции детей и все.
Структура
Aggregate
{
private virtual IList<Child> _children;
protected virtual List<Child> Children { get => _children; }
}
Child
{
}
Таким образом, только родитель имеет ссылку на Child
Я мог бы сделать что-то подобное в Совокупном репозитории
RemoveChild(Child kid)
{
Session.DeleteAsync(kid);
}
Но, насколько мне известно, репозитории должны быть только для конкретных агрегатов.
Меня интересует, как будет выглядеть код, который будет действительно сохранять изменения в хранилище данных?Как вы удалите ребенка.Репозиторий.