Документ db - денормализованные ссылки - лучшая практика

Да, это не проблема ravendb как таковая - это еще один вопрос дизайна, относящийся к документам dbs в целом.

Поэтому я довольно часто использовал DenormalizedReference, и мне только что пришло в голову, что во многих местах это делает DDD довольно сложным.

Итак, скажем, например, у меня есть объект, который имеет дочернюю коллекцию:

 List<DenormalizedReference<SomeType>>

Эта дочерняя коллекция создается, когда родительский экземпляр создается перегруженным конструктором, принимающим List<SomeOtherType>

теперь - в ctor я хотел бы создать этот список из передаваемой коллекции SomeOtherType - что означает, что мне нужно будет создать новый SomeType для каждого SomeOtherType.

Без передачи DocumentSession в мой домен - что я не собираюсь делать - это не сработает, потому что при сохранении родительского AR мы теряем свойства каждого дочернего объекта, кроме Id и Name

Как все остальные справляются с этим?

1 ответ

Решение

Вы не можете сделать это. Или, скорее, вы не должны этого делать.

Есть несколько способов решить эту проблему, обычно используя статический шлюз для получения сеанса, но проблема в том, что этот подход создает отложенную загруженную коллекцию со всеми проблемами, которые у этого есть.

RavenDB был специально разработан, чтобы избежать подобных проблем. И вы можете включать элементы, чтобы избежать возврата на сервер, но вам не следует пытаться прозрачно переходить между идентификаторами и типами.

Другие вопросы по тегам