#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. Например, если бы я просто хотел «Пейнтбольный мяч» из документа о местоположении «Лондон», разве он не вернул бы весь лондонский документ?