Мне нужно (по очень веской причине, поверьте мне) загрузить почти весь график моей базы данных с помощью NHibernate.Существует не так много сущностей, но график немного запутан.
Мой график выглядит примерно так:
- EntityA
- |
- -> EntityB
- |
- -> Список
Ну ... Вы получаете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 это не представляется возможным.