只使用Fluent NHibernate HasMany拉上Top X.

时间:2011-11-08 19:39:47

标签: nhibernate fluent-nhibernate

我在Fluent-NHibernate Map中有以下映射

public class PostMap : ClassMap<Post>
{
    public PostMap()
    {
        Id(i => i.Id).GeneratedBy.GuidComb();
        Map(x => x.SiteId);
        Map(x => x.Message);
        Map(x => x.DateCreated);
        Map(x => x.DateModified);
        HasMany(x => x.Comments)
            .OrderBy("DateCreated DESC")
            .ReadOnly()
            .Not.LazyLoad();
    }
}

每篇文章都有很多评论,我想做的只是从数据库中取回前5名,而不是在代码中删除它们。

2 个答案:

答案 0 :(得分:0)

您可以手动执行。从Comments映射中忽略属性Post,并使用Take(X)手动加载它:

// query posts
foreach (var post in posts)
{
    post.Comments = Session.QueryOver<Comments>()
                        .Where(x => x.PostId == post.Id)
                        .Take(X)                       
                        .Future();
}

使用Future代替List,它将对所有注释执行一次数据库往返。

答案 1 :(得分:-1)

应该可以使用过滤器。请在此处阅读:http://nhibernate.info/doc/nh/en/index.html#filters