У меня есть поиск по следующим критериям, который, как я ожидаю, вернет 1 проект с несколькими задачами, контекстами и одним пользователем.

На самом деле возвращается один и тот же проект несколько раз для каждой задачи.

Похоже, что мне не хватает утверждения в критериях, чтобы сообщить поиску, чтобы он возвращал уникальные проекты.

Любая помощь будет очень приветствоваться.

ICriteria criteria = NHibernateSession.Current.CreateCriteria(typeof(Project))
            .CreateAlias("User", "user")
            .Add(Restrictions.Eq("user.Username", username))
            .SetFetchMode("Tasks", FetchMode.Eager)
            .SetFetchMode("Contexts", FetchMode.Eager);

IList<Project> projects = criteria.List<Project>();

Заранее спасибо...

0
Burt 14 Фев 2010 в 22:24

3 ответа

Лучший ответ

Не уверен, но попробуйте добавить criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());

Дополнительная информация здесь: http: // colinramsay .co.uk / diary / 2008/01/15 / nhibernate-optimizing-query-with-programs /.

2
Pedro 14 Фев 2010 в 22:27

IList <Проект> проекты = критерии.UniqueResult <Проект> ();

1
limpalex 14 Фев 2010 в 22:29
1
Это фактически вернет только один результат, то, что он хочет, - это Distinct
 – 
Pedro
14 Фев 2010 в 22:32
1
UniqueResult не возвращает список ... в спящем режиме. org / hib_docs / v3 / api / org / hibernate /…
 – 
Pedro
14 Фев 2010 в 22:39
Педро, я должен был отдельно упомянуть в посте
 – 
Burt
15 Фев 2010 в 03:41

Это тоже способ решить эту проблему:

Быстрая загрузка ассоциаций сущностей с помощью NHibernate

1
Rob Hruska 21 Июл 2011 в 00:54