1
public class BlogPost
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Category { get; set; }
    public string Content { get; set; }
    public DateTime PublishedAt { get; set; }
    public string[] Tags { get; set; }
    public BlogComment[] Comments { get; set; }
}

public class BlogComment
{
    public string Id{get;set;}
    public string Title { get; set; }
    public string Content { get; set; }
}

BlogPost post = new BlogPost()
                {
                    Title = "Hello RavenDB",
                    Category = "RavenDB",
                    Content = "This is a blog about RavenDB",
                    Comments = new BlogComment[]
                                {
                                    new BlogComment() {Title = "Unrealistic", Content = "This example is unrealistic"},
                                    new BlogComment() {Title = "Nice", Content = "This example is nice"}

                                }
                };

坚持这将导致 BlogComment 字段被嵌入到 BlogPost 文档中

RavenDB 不会为 BlogComment 字段生成 Id

我真正想要的是 BlogPost 只保留对 BlogComment 字段的引用,并将 BlogComment 实例存储为单独的实体

任何提示都会做

谢谢。我必须编辑以正确代表我的困境

4

2 回答 2

3

RavenDB 不是一个关系数据库,所以如果你进入它期望在对象关系方面获得与 SQL 相同的行为,那么你将会遇到非常糟糕的时间。根据您的编辑,您需要将其存储Comment为具有自己string Id属性的单独实体。然后,您可以将其存储在BlogPost对象的属性中。但是,您真的不希望BlogPost每次有人添加评论时都更新文档,因此更好的解决方案是将 ID 存储在BlogPost对象上Comment,因为这可以正确表示关系并正确使用文档模型。然后您将加载一个BlogPost和所有Comment基于一个BlogPostID 的所有文档。

于 2013-10-23T14:27:42.303 回答
0

像这样(RavenDB 中的文档 ID 是字符串,因此引用也是):

public class Ex1
{
  public string Ex2Id {get;set;}
}

只要确保您以面向文档的心态正确地建模事物,而不是试图模仿关系行为

于 2013-10-23T13:48:50.510 回答