【问题标题】:Fluent nHibernate Selective loading for collectionsFluent nHibernate 集合的选择性加载
【发布时间】:2011-06-29 19:58:13
【问题描述】:

我只是想知道是否在加载包含集合的实体时,例如如果您可以定义要返回多少 cmets,则可以包含 0 -> n 评论的帖子。

目前我有这个:

public IList<Post> GetNPostsWithNCommentsAndCreator(int numOfPosts, int numOfComments)
    {
        var posts = Session.Query<Post>().OrderByDescending(x => x.CreationDateTime)
            .Take(numOfPosts)
            .Fetch(z => z.Comments)
                .Fetch(z => z.Creator).ToList();

        ReleaseCurrentSession();
        return posts;
    }

有没有一种方法可以在评论中添加 Skip 和 Take 以允许在集合上实现一种分页功能,这样您就不会最终加载很多不需要的东西。

我知道延迟加载,但我真的不想使用它,我正在使用 MVC 模式并希望我的对象从加载的存储库中返回,以便我可以缓存它们。我真的不希望我的观点导致选择语句。

解决这个问题的唯一真正方法是不对 cme​​ts 执行提取,而是对评论执行单独的 Select,以按创建日期时间排序,然后选择前 5 个,然后将返回的结果放入 Post 对象?

对此的任何想法/链接将不胜感激。

谢谢,

乔恩

【问题讨论】:

  • 我想你所追求的加入对于 NHibernate 来说太复杂了,它需要知道如何在帖子和 cmets 上使用 TOP 作为两个单独的子选择,并且然后加入他们

标签: nhibernate fluent-nhibernate


【解决方案1】:

简单的提取在关联表上执行左外连接,以便它可以用数据水合集合实体。您要执行的操作将需要对特定实体进行单独查询。从那里你可以使用任意数量的结构来限制你的结果集(skip/take、setmaxresults 等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多