Стремлюсь загрузить дерево в NHibernate - PullRequest
4 голосов
/ 30 января 2010

У меня проблема с попыткой загрузить дерево, это мой случай, у меня есть сущность, связанная с ней (иерархическая) с n уровнями; вопрос в том, могу ли я с нетерпением загрузить все дерево, используя ICriteria или HQL?

Заранее спасибо за любую помощь. Ariel

1 Ответ

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

Да ... просто установите правильный режим выборки.


Я приведу пример через минуту.


Пример взят отсюда =>

IList cats = sess.CreateCriteria(typeof(Cat))
    .Add( Expression.Like("Name", "Fritz%") )
    .SetFetchMode("Mate", FetchMode.Eager)
    .SetFetchMode("Kittens", FetchMode.Eager)
    .List();

Вы также можете указать, загружать ли ребенка потомком =>

.SetFetchMode("Kittens.BornOn", FetchMode.Eager)

Если вы используете Linq для NHibernate, используйте метод Expand =>

var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads")
                           where ad.Id == Id
                           select ad;

И я бы порекомендовал использовать вспомогательный метод, который создает строку из переданного в лямбда-выражении.


Вполне вероятно, что можно сказать Criteria загрузить целое дерево. Но я не знаю об этом, и я предпочитаю указывать, что именно мне нужно (кажется опасным загружать все).


Помогает ли это ?

...