RavenDb Создание сложной модели просмотра с использованием MultiMap?

Скажем, у меня есть следующие документы в RavenDb:

public class TopLevel
{
    public string Id { get; set; }
    public string Name { get; set; } 
}

public class NextLevel
{
    public string Id { get; set; }
    public string TopLevelId { get; set; }
    public string Name { get; set; }  
}

public class Leaf
{
    public string Id { get; set; }
    public string NextLevelId { get; set; }
    public string Name { get; set; }
}

И следующие модели просмотра:

public class TopLevelViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<NextLeveViewModell> NextLevels { get; set; }
}

public class NextLevelViewModel
{
    public string Id { get; set; }
    public string TopLevelId { get; set; }
    public string Name { get; set; }
    public List<LeafViewModel> Leaves { get; set; }
}

public class LeafViewModel
{
    public string Id { get; set; }
    public string NextLevelId { get; set; }
    public string Name { get; set; }
}

Каким будет лучший способ построить эту модель представления, не совершая множество поездок в БД и вручную собирая/конструируя структуру?

Могу ли я использовать мультикарту для этого?

Может глупый вопрос, но я давно не пользовался RavenDb! Занимался разработкой для Android / iPhone, так что немного заржавел!


person Community    schedule 13.09.2013    source источник


Ответы (1)


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

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

Кроме того, похоже, вы получаете хорошие отзывы от этой темы на Группа Google RavenDB уже есть. Старайтесь не делать кросс-пост в будущем. Если вам нужно что-то очень конкретное, StackOverflow отлично подойдет. Если вам нужно больше общих практических советов или обсуждения идей, используйте группу Google.

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

person Matt Johnson-Pint    schedule 14.09.2013
comment
Я не хочу, чтобы они хранились как один огромный документ, так как нужно загружать каждый из них отдельно - это чисто для модели представления. Мне удалось сделать все это в LINQ, не запачкавшись, и, кажется, он загружается достаточно быстро, так что я доволен этим. Спасибо за совет по публикации. - person ; 15.09.2013