2010-02-20 4 views

ответ

1

Вы можете изменить режим выборки для каждого запроса динамически.

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

См. Раздел 12.5 of documentation.

+0

Есть ли BestPractice для скрытия API ICriteria, потому что я не хочу использовать этот API в слое пользовательского интерфейса? Должен ли я создать перегрузку для моего метода repository.GetAll или есть другие рекомендации? – Rookian

+0

Я не уверен, что вы имеете в виду. Возможно, посмотрите на «Обтекание API запросов» в http://jnb.ociweb.com/jnb/jnbNov2003.html, если вы обеспокоены тем, как предлагать объекты запросов в пользовательском интерфейсе. В противном случае уровень пользовательского интерфейса зависит от бизнес-уровня, который зависит от уровня доступа к данным, а элементы nhibernate обычно находятся на уровне доступа к данным. – ewernli

+0

Я просто переопределяю мой метод GetAll. Мне не нравятся уродливые струны, я думаю, что я написал для этого небольшой вспомогательный класс. Спасибо, пока. – Rookian

1

Для запросов - да :)

+0

Не могли бы вы дать мне более подробную информацию? – Rookian

+0

Вот хорошее объяснение от Айенде: http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx (HQL). Пример ICriteria у вас есть у @ewernli. – dariol