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