即使是最简单的查询,我也无法查询RavenDB,可能我做错了什么,但几个小时后我再也看不到了。我GOOGLE了几乎所有的东西我能想到的..如何使用Raven LoadDocument
我有这些实体:
public class User
{
public string Id { get; set; }
public string DisplayName { get; set; }
public string RealName { get; set; }
public string Email { get; set; }
public string PictureUri { get; set; }
public List<Comment> Comments { get; set; }
public List<Role> Roles { get; set; }
}
public class NewsItem
{
public string Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public DateTime Created { get; set; }
public string UserId { get; set; }
public List<Tag> Tags { get; set; }
public List<Comment> Comments { get; set; }
public List<WebImage> Images { get; set; }
}
我要查询这些,所以我得到newsItems的列表,但沿着它的用户信息。所以,我阅读文档,并试图LoadDocument功能,索引:
public class NewsItemIndexWithComments : AbstractIndexCreationTask<NewsItem, NewsItemIndexWithComments.Result>
{
public class Result
{
public string AuthorName { get; set; }
}
public NewsItemIndexWithComments()
{
Map = newsItems => from newsItem in newsItems
select new
{
AuthorName = LoadDocument<User>(newsItem.UserId).DisplayName
};
}
}
对此我尝试使用这样的:
var result = _documentSession.Query<NewsItemIndexWithComments.Result, NewsItemIndexWithComments>().AsProjection<NewsItemIndexWithComments.Result>().ToList();
现在,我得到的我的列表中的文件数量,但AUTHORNAME是始终为空。如果我不使用AsProjection方法,我不会得到任何结果。任何人都可以给我一个适当的例子,我可以进一步试验吗?
谢谢。
_编辑:
帮助很大,谢谢:)现在的第二步,我很抱歉,如果我是一个有点newbish,但你必须从某个地方开始。在newsitems中有评论,在这些评论中还有另外一个关于userid的参考。您大概可以猜到我想要做什么:我也想要评论的用户信息以及评论。
新指数:
public class NewsItemIndexWithComments : AbstractIndexCreationTask<NewsItem, NewsItemIndexWithComments.Result>
{
public class Result : NewsItem
{
public string AuthorName { get; set; }
public string AuthorId { get; set; }
}
public NewsItemIndexWithComments()
{
Map = newsItems => from newsItem in newsItems
let user = LoadDocument<User>(newsItem.UserId)
select new
{
AuthorName = user.DisplayName,
AuthorId = user.Id,
};
Store(x => x.AuthorName, FieldStorage.Yes);
Store(x => x.AuthorId, FieldStorage.Yes);
}
}
评论类:
public class Comment
{
public string Id { get; set; }
public string Text { get; set; }
public string UserId { get; set; }
public string User { get; set; }
public DateTime Created { get; set; }
}
我如何可以查询的评论和扩大的结果吗?或者,仅仅为评论创建一个新索引并获得上述解决方案的用户信息模拟效果会更好?
这帮助!现在至少我得到了结果。但是这给我留下了另一个问题(请参阅编辑)。感谢您的帮助:) – neographikal 2013-03-06 08:48:46
我对你的对象模型有点困惑。你在'User'和'NewsItem'类中嵌入了评论对象,但在你的Comment类中也有一个'Id'。是在他们自己的文件中的评论,还是其他文件的一部分?他们现在拥有它的方式在两个地方都是非规范化的。你确定你不是故意有一个'List CommentIds'?另外 - 这里有两种不同类型的评论吗?关于NewsItem的评论和关于用户的评论?或者你只是试图表明这些评论是由特定的用户做出的? –
2013-03-06 13:10:45
呃,我的不好,根本不应该在用户课上有任何评论。愚蠢的我,我是这么洗牌的代码,我省略了这个错误。对困惑感到抱歉。 – neographikal 2013-03-06 17:51:05