NHibernate: загрузить весь граф (коллекция коллекции collection) - PullRequest
0 голосов
/ 27 января 2012

Мне нужно (по очень веской причине, поверьте мне) загрузить почти весь график моей базы данных с помощью NHibernate.Существует не так много сущностей, но график немного запутан.

Мой график выглядит примерно так:

  • EntityA
  • |
  • -> EntityB
  • |
  • -> Список
    • |
    • -> EntityD
    • |
    • -> Список
      • |
      • -> EntityF

Ну ... Вы получаетеidea.

Я бы хотел загрузить все это как можно меньшим количеством запросов и циклических переходов и, возможно, вообще не выбирать N + 1.Кроме того, я хочу сохранить его в виде графика, чтобы потом можно было легко просмотреть его позже.

Какой мой лучший вариант?NHibernateUtil.Initialize ()?Fetch () / FetchMany ()?Future / MultiQuery?

Я немного растерялся, но, думаю, мне придется сделать это несколькими операциями.Но что будет наиболее эффективным?

И бонус: все сущности имеют свойство IsPublished.Я хочу иметь возможность загружать либо все сущности, либо только те, которые опубликованы .

РЕДАКТИРОВАТЬ

В конце я попробовал это:

var applicationFields = NHibernateSession.Current.Query<ApplicationField>().Where(af => af.Ispublished)
.FetchMany(af => af.Illustrations)
.ThenFetch(i => i.InteractiveConfiguration)
.ThenFetchMany(ic => ic.UniqueSellingPoints)
.ThenFetchMany(usp => usp.Pictures)
.ToList();

Учитывая, как выглядит мой график, я думаю, что все в порядке.Также у меня нет нескольких коллекций на одном уровне, что, как я знаю, побуждает к декартовым произведениям.

Для тех, кто спросил, это не проблема рекурсии.В противном случае я буду использовать SQL Server CTE.Также я не обновляю никакую сущность;это просто для чтения (для автономного приложения).

Но я не знаю, как ответить на мой "бонусный" вопрос.Я знаю, что EF может загружать частичные коллекции на основе фильтров, но с NH это не представляется возможным.

1 Ответ

1 голос
/ 30 января 2012

короткий ответ: комбинация Fetch () / FetchMany () и Future () в зависимости от варианта использования и ожидаемых размеров списка

...