RavenDB пейджинг внутренней коллекции - PullRequest
4 голосов
/ 12 января 2012

Я новичок в RavenDB, и, насколько я понимаю, когда вы попросите документ, вы получите весь документ (если вы не используете какой-то индекс и т. Д.).

Пример сценария

Возьмем, к примеру, сценарий документа блога, где документ выглядит следующим образом:

public class Blog
{
   public string Id { get; set; }
   public string AuthorId { get; set; }
   public DateTime PublishedUTC { get; set; }
   public string Title { get; set; }
   public string Content { get; set; }
   public Comment[] Comments { get; set; }
}

public class Comment
{
   public string Id { get; set; }
   public string AuthorId { get; set; }
   public DateTime PublishedUTC { get; set; }
   public string Content { get; set; }
}

Скажем, у нас есть веб-страница /blogs/posts/.На странице отображается постраничный набор сообщений блога и комментариев для каждого из блогов.Я понимаю, как использовать подкачку в документах блога с методами Skip() и Take().Я хотел бы применить логику подкачки к внутренней коллекции Comments для каждого из документов блога.

Мои вопросы

  1. Как мне получить постраничный набор блогов и постраничный набор каждого из их комментариев?

  2. Учитывая требования к подкачке, измените ли вы сценарий данного документа блога, чтобы комментарии не размещались в документе блога?

1 Ответ

3 голосов
/ 12 января 2012
  1. Если вы использовали .Skip() и .Take() для получения постраничного списка постов в блоге, вы уже делали это правильно. Чтобы получить постраничный список для комментариев, вы можете использовать те же методы в списке в памяти (тогда это будет linq-to-objects). Поэтому я предлагаю изменить ваш массив Comment[] на List<Comment>, тогда у вас есть эти два доступных метода linq.

  2. Если бы я изменил почтовый документ так, чтобы он не содержал комментарии, я бы сделал это не из-за подкачки страниц (нет недостатка, см. Мой первый пункт), а из-за сохраненной пропускной способности в базе данных. -запрос. У меня было бы 2 документа, один, содержащий пост, другой, содержащий все комментарии. Таким образом, вам не нужно загружать все комментарии каждый раз, когда вы хотите отобразить список сообщений, но при этом иметь преимущество базы данных документов, когда они вам действительно нужны. Используя RavenDB, также очень легко определить индексы для ваших элементов комментариев, в случае, если они вам нужны где-то еще (на боковой панели или около того). Вы можете найти именно эту реализацию в RaccoonBlog .

...