nhibernate, энергичная загрузка и пейджинг - PullRequest
10 голосов
/ 10 декабря 2010

Я создаю приложение MVC, которое использует nhibernate и подкачки. У меня есть родительские> дочерние отношения, которые я пытаюсь загрузить в свои дочерние записи. Это все работает нормально.

У меня проблема с подкачкой. Я хотел бы иметь 15 пунктов на странице. Это прекрасно работает, если у каждого родителя есть только один ребенок. Проблема в том, что у одного из родителей больше одного ребенка. Например, если родитель имеет 2 дочерние записи, тогда база данных фактически выбирает 15 записей, две из которых представляют одного и того же родителя, по одной для каждого из двух дочерних элементов. Поэтому в моем представлении данных на странице оказалось, что существует только 14 записей.

Кто-нибудь знает, как я могу получить счетчик страниц только по родителям, все еще стремясь загрузить свои дочерние объекты?
Это будет общедоступный сайт, поэтому я не думаю, что будет хорошей идеей ленивая загрузка, так как это вызовет слишком много поездок на сервер.

Есть ли что-то встроенное в NHibernate, которое могло бы справиться с этим, что мне не хватает?

Спасибо за любые мысли.

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Вы можете пометить свою ассоциативную собственность как fetch="subselect" - это также гарантирует, что у вас не возникнет проблем с огромным декартовым продуктом за счет выполнения двух запросов для каждого выбора.

0 голосов
/ 10 декабря 2010

Использование подсказки batch-size в вашем отображении для дочерней коллекции, вероятно, лучший / самый простой способ справиться с этим.Для дальнейшего обсуждения см. Мой ответ на этот аналогичный вопрос .

0 голосов
/ 10 декабря 2010

Вам необходимо использовать отдельный преобразователь результата корневого объекта в вашем запросе. Вы не сказали, используете ли вы HQL или критерии, но API одинаков для обоих.

// criteria
criteria.SetResultTransformer(Transformers.DistinctRootEntity)

Это заставит результирующий набор содержать только различные родительские объекты.

...