NHibernate - установить режим выборки для объектов внуков - PullRequest
3 голосов
/ 08 июля 2010

У меня следующий запрос Criteria (с использованием лямбда-расширений):

var workflowResult = repository.GetSession() 
                .CreateCriteria<Core.Domain.Application>() 
                .SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows, FetchMode.Join)  
                .SetResultTransformer(new DistinctRootEntityResultTransformer()) 
                .Future<Core.Domain.Application>(); 

Это работает правильно. Каждое приложение охотно загружает Коллекция ApplicationWorkflows. Тем не менее, я хотел бы пойти еще глубже и загрузите объект ApplicationStatus каждого ApplicationWorkflow. я может сделать это с помощью следующего HQL, но хотел бы перевести на Критерии:

var workflowQuery = "SELECT DISTINCT app" + 
                               " FROM Application app" + 
                               " JOIN FETCH app.ApplicationWorkflows awf" + 
                               " JOIN FETCH awf.ApplicationStatus"; 

Мне посоветовали использовать следующее, но у меня проблемы с ним, работающие во всех случаях:

.SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows[0].ApplicationStatus, FetchMode.Join)

1 Ответ

0 голосов
/ 12 июля 2010

Попробуйте это.

var workflowResult = repository.GetSession() 
                .CreateCriteria<Core.Domain.Application>() 
                .CreateAlias("ApplicationWorkflows", "awf") 
                .SetFetchMode("ApplicationWorkflows", FetchMode.Join)  
                .SetFetchMode("awf.ApplicationStatus", FetchMode.Join)  
                .SetResultTransformer(new DistinctRootEntityResultTransformer()) 
                .Future<Core.Domain.Application>(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...