在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批准方式是什么相关评论对象?
有一种想法是我可以将User
和Comment
转换为CommentViewModel
并将其发送到客户端,但这似乎非常手动。
另一个选项可能是为作者的Comment
添加另一个属性,即[JsonIgnore]
',并且在getter中,懒惰加载来自Raven会话的用户。这感觉很脏,因为Comment模型对象需要持有对乌鸦会话的引用。
答案 0 :(得分:1)
你想这样做:
var question = RavenSession.Include<Question>(x => x.Author)
.Include(x => x.Comments.Select(c=>c.Author))
.Load(id);
这适用于1.2,注意。 然后你可以调用Load(question.Author)从会话缓存中获取文档。