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