2010-01-30 2 views
4

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

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

ответ

1

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


Я включу пример через минуту.


Пример взят from here =>

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, использование Развернуть метод =>

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

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

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


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

+4

Я знаю, что могу загружать коллекции, связанные с сущностью, используя FetchMode, но я хочу загрузить все дерево, а не только следующий уровень. Используя свой подход, я хотел бы сделать: .SetFetchMode ("Дети", FetchMode.Join) .SetFetchMode ("Children.Children", FetchMode.Join) .SetFetchMode ("Children.Children.Children", FetchMode.Join) и т. Д. – Argons

Смежные вопросы