Пейджинг в ActiveRecord - PullRequest
       12

Пейджинг в ActiveRecord

1 голос
/ 31 мая 2010

Поддерживает ли CastleProject ActiveRecord пейджинг? Мне нужно загрузить только те данные, которые сейчас видны на экране. Если я использую [HasMany], он будет загружен целиком либо сразу, либо при первом вызове (если атрибут lazy имеет значение true). Однако мне нужно только что-то вроде первых 100 записей (затем, может быть, 100 следующих записей).

Другой вопрос, как загрузить только 100 предметов. Если коллекция слишком большая, объем памяти может достигнуть своего предела, если мы будем постоянно загружать все больше и больше элементов.

1 Ответ

3 голосов
/ 31 мая 2010

Да, Castle ActiveRecord поддерживает разбиение по страницам. В дополнение к API NHibernate для пейджинга вы можете использовать SlicedFindAll(), например ::

Post[] posts = Post.SlicedFindAll(10, 20);

, где 10 - первый индекс результата, а 20 - размер страницы (он вернет массив 20 Post с)

Вы также можете определить критерии, например, чтобы получить первые 100 комментариев поста:

Post post = ...    
Comment[] comments = Comment.SlicedFindAll(0, 100, Restrictions.Eq("Post", post));

Вы также можете «пейджировать» коллекции с помощью пакетной выборки (что соответствует свойству BatchSize в HasManyAttribute), но этот размер пакета фиксирован, поэтому он не такой гибкий, как при обычном подходе к подкачке. *

...