При работе со ссылками на коллекцию необходимо Include
другую коллекцию: sessions.Include(x=>x.PaymentInfos).FindOne(x => x.SessionGuid == sessionId)
Документация LiteDb описывает поведение, которое вы видите:
Если вы не используете Include
в запросе, классы загружаются только с установленным идентификатором (все остальные свойства останутся со значением по умолчанию / нулевым значением).
При этом может быть лучшеизбегать использования DbRef
.LiteDb - это нереляционная база данных, поэтому она использует другие шаблоны, чем традиционная база данных SQL.Чтобы процитировать Stack Exchange ответ о лучших практиках NoSql:
Подходящим подходом для проектирования баз данных NoSQL является DDD (Domain Driven Design).Для некоторых людей, которые раньше проектировали RDBMS, NoSql выглядит как анти-паттерны Sql, и это имеет больше смысла, когда рассматривается в области DDD.
Когда я впервые переключился с SQL на LiteDB, я началиспользуя DbRef
и отдельные коллекции для всего.Со временем я стал больше тренироваться думать нереляционно, и обнаружил, что сценарий использования, над которым я работал (отношения между объектами, расположенными в трехмерном пространстве), может быть более точно смоделирован путем хранения информации внутри объектов, а не использования отдельной коллекции иDbRef
.