Документ db - денормализованные ссылки - лучшая практика
Да, это не проблема ravendb как таковая - это еще один вопрос дизайна, относящийся к документам dbs в целом.
Поэтому я довольно часто использовал DenormalizedReference, и мне только что пришло в голову, что во многих местах это делает DDD довольно сложным.
Итак, скажем, например, у меня есть объект, который имеет дочернюю коллекцию:
List<DenormalizedReference<SomeType>>
Эта дочерняя коллекция создается, когда родительский экземпляр создается перегруженным конструктором, принимающим List<SomeOtherType>
теперь - в ctor я хотел бы создать этот список из передаваемой коллекции SomeOtherType - что означает, что мне нужно будет создать новый SomeType для каждого SomeOtherType.
Без передачи DocumentSession в мой домен - что я не собираюсь делать - это не сработает, потому что при сохранении родительского AR мы теряем свойства каждого дочернего объекта, кроме Id и Name
Как все остальные справляются с этим?
1 ответ
Вы не можете сделать это. Или, скорее, вы не должны этого делать.
Есть несколько способов решить эту проблему, обычно используя статический шлюз для получения сеанса, но проблема в том, что этот подход создает отложенную загруженную коллекцию со всеми проблемами, которые у этого есть.
RavenDB был специально разработан, чтобы избежать подобных проблем. И вы можете включать элементы, чтобы избежать возврата на сервер, но вам не следует пытаться прозрачно переходить между идентификаторами и типами.