Размер коллекции NHibernate без загрузки всей коллекции - PullRequest
0 голосов
/ 23 августа 2011

:)

У меня есть следующие классы:

  • Не нравится
    • DislikedComment (комментарий)
    • MemberId (int)
  • Комментарий
    • Не нравится (Список )
    • Текст (строка)
    • ArticleId (int)

(Дополнительные свойства для краткости опущены)

Эти классы отображаются с использованием Fluent NHibernate ожидаемым образом (с обратным в списке в комментарии).Теперь я хотел бы, чтобы NHibernate загружал размер коллекции Dislikes в Comment при загрузке комментария, но без загрузки всей коллекции.Я бы очень хотел избежать формул (yuk @ native sql), и я бы предпочел, чтобы NHibernate запускал только один запрос.Возможно ли это каким-либо образом?

Я знаю о функции Extra Lazy, но, насколько я знаю, это запускает дополнительный запрос, который не оптимален при списке сотен комментариев.

1 Ответ

1 голос
/ 23 августа 2011

Распространенным заблуждением является то, что для наилучшей производительности требуется 1 запрос.

Каждое объединение требует, чтобы база данных выполняла дополнительную работу, а сложность и стоимость запроса быстро растут с каждым дополнительным объединением.Хотя реляционная база данных оптимизирована для обработки объединений, зачастую более эффективно выполнять несколько отдельных запросов вместо одного запроса с несколькими объединениями.

в вашем случае я бы сделал 2 запроса.

var dislikeCount = _session.Query<Comment>().Count(x=>x.Dislike);
var comments = _session.Query<Comment>().ToList();

ps: не забудьте обернуть его внутри транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...