Как охотно получить все дочерние коллекции? - PullRequest
0 голосов
/ 23 января 2012

Мне нужен способ быстро получить все дочерние коллекции всех сущностей определенного типа, используя NHibernate.

Я пытался:

var myObjectList = SessionHolder.Current
    .CreateCriteria(typeof(MyObject))
    .SetFetchMode("Clients", FetchMode.Eager)
    .SetFetchMode("Locations", FetchMode.Eager)
    .SetFetchMode("Contracts", FetchMode.Eager)
    .List<MyObject>();

Запрос должен был вернуть все экземпляры MyObject из БД с их загруженными коллекциями, но он не работал должным образом, вместо этого он возвратил больше объектов, чем ожидалось. Я предполагаю, что это как-то связано с n + 1 проблемой выбора.

Я нашел это решение для извлечения коллекций, но в настоящее время я ограничен использованием NHibernate 1.2.1.4000, поэтому я не могу использовать Futures.

Я провел много исследований до публикации, но ничего не смог найти.

Спасибо за ваши ответы!

1 Ответ

1 голос
/ 23 января 2012

Попробуйте использовать отдельный преобразователь результата:

var myObjectList = 
    SessionHolder.Current
                 .CreateCriteria(typeof(MyObject))
                 .SetFetchMode("Clients", FetchMode.Eager)
                 .SetFetchMode("Locations", FetchMode.Eager)
                 .SetFetchMode("Contracts", FetchMode.Eager)
                 .SetResultTransformer(new DistinctRootEntityResultTransformer())
                 .List<MyObject>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...