Во-первых, пожалуйста, не пытайтесь спорить со мной из-за энергичной нагрузки - обход графа объектов и создание (из-за ленивой загрузки) даже большего, чем ОДИН обход в базу данных, просто не вариант.
У меня большой объектный граф.Я хочу получить корневой объект, а также подмножество его детей, внуков, правнуков и т. Д. В настоящее время я делаю это, создавая несколько Future
объектов (с критериями), и в каждом из них яdo SetFetchMode("...", FetchMode.Eager)
- см. пост Айенде и 3-й комментарий Сэма здесь .Есть две проблемы:
NHibernate выполняет несколько запросов на выборку в одном цикле - один для каждого пути от корня до листа (A.B.C.D
), что прекрасно, но используетjoin
, а не subselect
, что я действительно хочу.Использование join
означает, что тонна данных должна быть отправлена из базы данных, должна быть проанализирована, и nhibernate должен выполнить намного больше работы, чем необходимо.
В результатепроблема 1 - дублирование объектов, вложенных более чем на один уровень в некоторых случаях.
Вторая проблема, которую я «решил», установив для моих коллекций значение Set, но затем я теряю возможность упорядочения- поскольку я должен указать ISet
в качестве интерфейса, мой код не сможет узнать, действительно ли набор является OrderedSet
.
Кто-нибудь знает, как выполнить за один цикл,нетерпеливая загрузка объекта плюс несколько глубоко вложенных коллекций, но без использования объединения?
Буду очень признателен!Я искал в Интернете ответы, по-видимому, я не первый, кто ударил эту стену.