0

在 ASP.NET MVC (4) 应用程序中使用 RavenDB,加载一组相关实体并将它们传递给视图的正确模式是什么?

以 Stack Overflow 为例,假设有以下实体:

class User
{
    public int Id { get; set; }

    public string UserName { get; set; }
}

class Comment
{
    public int Id { get; set; }

    public string Body { get; set; }

    public string Author{ get; set; }
}

class Question
{
    public int Id { get; set; }
    // ...
    public List<Comment> Comments { get; set; }

    public Question()
    {
        Comments = new List<Comment>();
    }
}

我们要做的是在问题下的评论旁边显示用户信息,评论作为问题文档的一部分存储,所以Include我们Comment.Author

我们的查询可能如下所示:

var question = RavenSession.Include<Question>(x => x.Author)
                           .Include<Comment>(x => x.Author)
                           .Load<Question>(id);

现在我们有了包含所有评论的问题对象,并且 Raven 客户端已经缓存了我们需要的所有用户配置文件,将用户对象与相关评论对象配对的正确/最佳/最 RavenDB 认可的方法是什么?

一个想法是我可以将UserandComment转换为 aCommentViewModel并将其发送给客户端,但这似乎很手动。

另一种选择是Comment为作者添加另一个属性,即[JsonIgnore]'d 和在 getter 中,从 Raven 会话延迟加载用户。这感觉很脏,因为 Comment 模型对象需要保存对 raven 会话的引用。

4

1 回答 1

1

你想这样做:

var question = RavenSession.Include<Question>(x => x.Author)
                           .Include(x => x.Comments.Select(c=>c.Author))
                           .Load(id);

这适用于 1.2,请注意。然后你可以调用 Load(question.Author) 从会话缓存中获取文档。

于 2012-10-31T14:10:21.860 回答