NHibernate: Как выполнить активную выборку множества детей и внуков (граф объектов) за один проход к базе данных?

Во-первых, пожалуйста не пытайтесь отговорить меня от выполнения жадной загрузки - обход графа объекта и вызов (посредством ленивой загрузки) даже более ОДНОГО обхода к базе данных просто не вариант.

У меня есть большой граф объектов. Я хочу получить корневой объект, а также подмножество его потомков, внуков, правнуков и т. Д. В настоящее время я делаю это, создавая несколько объектов Future (с критериями) и в каждый, я делаю SetFetchMode ("...", FetchMode.Eager) - см. сообщение Айенде и 3-й комментарий Сэма здесь . Есть две проблемы:

  1. NHibernate выполняет несколько запросов выбора в одном цикле - по одному для каждого пути от корня к листу ( ABCD ), что отлично, но использует join , а не подвыбор , что я действительно хочу, чтобы он делал. Использование join означает, что из базы данных необходимо отправить тонну данных, которые необходимо проанализировать, а nhibernate должен выполнить гораздо больше работы, чем необходимо.

  2. В результате проблемы 1 - дублирование в некоторых случаях объекты вложены более чем на один уровень.

Вторую проблему я «решил», установив для своих коллекций значение Set, но затем я теряю возможность упорядочивания - так как я должен указать ISet в качестве , мой код не может узнать, действительно ли набор является OrderedSet .

Кто-нибудь знает, как выполнить, за один проход, нетерпеливую загрузку объекта плюс несколько глубоко вложенных коллекций, но без использования соединения?

Я был бы чрезвычайно благодарен! Я рыскал по сети в поисках ответов, видимо, я не первый, кто ударился в эту стену.

13
задан Blaisorblade 25 July 2012 в 09:52
поделиться