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