RavenDB建模1对多文档

3

考虑这个示例模型:

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个回答

2

Phil,

  • 在Activity中添加一个字符串类型的LocationId属性,这样你就可以通过它来查询相关信息。
  • 也许更简单的方法是将Activity作为Location内的集合存储(即它们不是独立的文档,而是被嵌套在其中)。

我曾考虑将活动存储在位置内,但这意味着当用户只想查看位置中的一个活动时会出现问题(整个文档将被返回)。 - Phil
当你说“查询它们”时,能否提供在RavenDB中如何执行此操作的链接。我可以在关系型数据库中使用连接等方式,但不确定在RavenDB中该怎么做。例如,如果我只想从“伦敦”位置文档中获取“Paintballing”,那么它不会返回整个伦敦文档吗? - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接