У меня есть данный aggregateRoot:
public class Room : Entity
{
public Room()
{
RoomRates = new HashSet<RoomRate>();
}
public string Name { get; set; }
public ICollection<RoomRate> RoomRates { get; }
public int HotelId { get; set; }
public void AddRoomRate(DateRange period, Money price)
{
RecalculateRates(period);
RoomRates.Add(new RoomRate{Period = period, Price = price, RoomId = Id});
}
Дочерний элемент:
public class RoomRate : Entity
{
public DateRange Period { get; set; }
public Money Price { get; set; }
public int RoomId { get; set; }
public void SetStart(DateTime start) {
Period = new DateRange(start, Period.End);
}
public void SetEnd(DateTime end)
{
Period = new DateRange(Period.Start, end);
}
}
Метод RecalculateRates может добавлять или изменять дочерние элементы:
foreach (var rateToReArrange in ratesToReArrange)
{
var periodToReArrange = rateToReArrange.Period;
if (periodToReArrange.Contains(ratePeriod))
{
RoomRates.Add(new RoomRate
{
Period = new DateRange(periodToReArrange.Start, dayBeforePeriodStarts),
Price = rateToReArrange.Price, RoomId = rateToReArrange.RoomId
});
rateToReArrange.SetStart(dayAfterPeriodEnds);
return;
}
if (rateToReArrange.Period.StartsInRange(ratePeriod))
{
rateToReArrange.SetStart(dayAfterPeriodEnds);
return;
}
if (rateToReArrange.Period.EndsInRange(ratePeriod))
{
rateToReArrange.SetEnd(dayBeforePeriodStarts);
return;
}
}
После добавления дочерних элементовПересчитать я хочу сохранить корень:
room.AddRoomRate(new DateRange(request.Start,request.End), new Money(request.Amount, request.Currency.ToString()));
_context.Rooms.Update(room);
await _context.SaveChangesAsync(cancellationToken);
Я не могу обновить сущность, потому что есть новые дочерние элементы.Как сохранить изменения в корне?
Я использую CQRS и пытаюсь добавить новую ставку в команду.Должен ли я создать хранилище?