У меня есть модель домена с совокупным корнем:
public interface IAggregateRoot {
public string Id { get; }
public string Foo { get; set; }
public int Bar { get; set; }
public IList<IChildEntity> Children { get; }
}
Коллекция Children имеет тенденцию становиться очень большой, и я буду лениво загружать ее, когда экземпляр IAggregateRoot будет получен через IAggregateRootRepository. Моя проблема в этом; если я хочу добавить IChildEntity в коллекцию детей IAggregateRoot, как мой репозиторий может позволить мне избежать сохранения всей совокупности?
Например, скажем, мой IAggregateRootRepository должен был выглядеть следующим образом:
public interface IAggregateRootRepository {
public IAggregateRoot GetById(string id);
public void AddOrUpdate(IAggregateRoot root);
}
Затем я могу добавить в коллекцию Children, получив экземпляр IAggregateRoot через IAggregateRootRepository.GetById (), добавив дочерний элемент в коллекцию Children, а затем сохранив его все через IAggregateRootRepository.AddOrUpdate (). Это, однако, сохранит весь совокупный корень вместе с его огромной коллекцией дочерних элементов каждый раз, когда я добавляю дочернюю сущность. Я думаю, я бы мог обойти это, если бы мой репозиторий выглядел так:
public interface IAggregateRootRepository {
public IAggregateRoot GetById(string id);
public void AddOrUpdate(IAggregateRoot root);
public void AddOrUpdate(IChildEntity child);
}
Но, как я понял шаблон репозитория, репозиторий должен иметь дело только с совокупными корнями, и решение, приведенное выше, безусловно, нарушает это требование.
Существуют ли другие, более эффективные способы избежать этой проблемы?