Ленивая загрузка в MongoDB с NoRM - PullRequest
3 голосов
/ 21 октября 2010

У меня есть модель, подобная этой: (упрощенно)

Вопрос:

public class Question
{
    public string QuestionID { get; set; }

    public string Title { get; set; }
    public string Body { get; set; }

    public List<Answer> Answers { get; set; }
}

Ответ:

public class Answer
{
    public string QuestionID { get; set; }
    public string Body { get; set; }
}

Я намерен хранить данные в MongoDB и хотел бы использовать NoRM с этим.

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

Чтобы запрос на вопрос также получал ответы ..?(оба будут "сообщениями", хранящимися в одной коллекции на MongoDB)

Ответы [ 2 ]

7 голосов
/ 24 октября 2010

ОК, концепция «отложенной загрузки» в основном чужды базе данных, такой как MongoDB.Взгляните на свою схему: Question имеет List из Answers.

В СУБД «ленивая» часть позволяет загружать «список» отдельно от оригинала.На самом деле происходит два запроса, вы просто пытаетесь отложить второй запрос.

В MongoDB происходит только один запрос.Answers встроены в вопрос, поэтому ваш запрос на Questions автоматически включает список Answers.

Пожалуйста, посмотрите примеры NORM для лучшего примера этого: http://normproject.org/samples

Суть в том, что предоставленная вами структура больше не является несколькими таблицами.Это всего лишь одна коллекция со встроенными документами.Таким образом, концепция «Ленивая загрузка» действительно не нужна, потому что вы не можете «Ленивая загрузка» одним запросом.

6 голосов
/ 04 декабря 2013

Я ценю, что это старая ветка, но другие люди все еще могут ее найти (как и я).Ленивая загрузка возможна как в MongoDB, так и поддерживается драйвером C #.

Изучите следующие классы: LazyBsonDocument и LazyBsonArray

Из учебной документации по драйверу C #: «Ленивые классы отличаются тем, что откладывают десериализацию BSON до тех пор, пока она не понадобится. Это полезнокогда вам нужно только одно или два поля из сложного документа, потому что это не повлечет за собой затрат на десериализацию всего документа или массива, а только на части, которые необходимы. Эта десериализация происходит на одном уровне за раз. "

На момент написания документа учебник можно найти здесь: http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/

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

Надеюсь, это кому-нибудь поможет,

Ник

...