RavenDB моделирование 1 для многих документов

#c# #ravendb

#c# #ravendb

Вопрос:

Возьмем этот пример модели:

 public class Location
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class Activity
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
  

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

Я сделал все, чтобы объединить эти документы в один документ, но, просматривая и читая документацию и блоги, к документам нужно обращаться отдельно. Вы можете представить страницу веб-сайта для каждого местоположения, на которой перечислены действия, и страницы действий с подробными сведениями.

Примерами запросов могут быть:

  • Выборка всех местоположений
  • Извлеките сведения о местоположении (заданное имя местоположения из URL)
  • Извлеките все действия для каждого местоположения (заданное имя местоположения из URL)
  • Извлечение сведений о действиях (с указанием имени местоположения и имени действия из URL)

Используя метод DenormalizedReference, описанный в:

http://blogs.sonatribe.com/wayne/2011/07/06/using-denormalized-references-in-ravendb/

(и я видел это, но не мог понять синтаксис или если он делает то, что мне нужно

http://ravendb.net/faq/denormalized-references )

Похоже, это соответствует моим сценариям. Но при создании демонстрационного проекта с вышеуказанными типами я заметил, что если я изменил название местоположения, это не изменило его в действии. Синхронизация документов — это очень важно.

Итак, как мне этого добиться?

Ответ №1:

Фил,

  • имейте свойство string LocationID в Activity, которое позволит вам запрашивать их.
  • вероятно, было бы проще просто сохранить действия в виде коллекции внутри местоположения (чтобы они не были отдельным документом, а были встроены внутрь).

Комментарии:

1. Я рассматривал возможность хранения действий внутри местоположений, но это означало бы, что у меня возникнут проблемы, когда пользователь захочет просто просмотреть одно действие в этом местоположении (будет возвращен весь документ).

2. Когда вы говорите «запрос для них», не могли бы вы сослаться на то, как я бы это сделал в RavenDB. Я мог видеть в СУБД использование объединений и т. Д., Но не уверен в RavenDB. Например, если бы я просто хотел «Пейнтбольный мяч» из документа о местоположении «Лондон», разве он не вернул бы весь лондонский документ?