.net NHibernate 3.2 LINQ n+;1解决

.net NHibernate 3.2 LINQ n+;1解决,.net,linq,nhibernate,.net,Linq,Nhibernate,我将NHibernate3.2与LINQ结合使用,并在SQL中使用n+1个select查询。在映射中,设置为“join”。当我使用条件时,只有一个select查询。我也找不到我在不同示例中看到的方法Fetch()或FetchMany()。是否存在使用Linq到Nhibernate 3.2解决n+1问题的方法? 我的代码的简化版本 class News { public virtual int Id { get; protected set; } public virtual Da

我将NHibernate3.2与LINQ结合使用,并在SQL中使用n+1个select查询。在映射中,设置为“join”。当我使用条件时,只有一个select查询。我也找不到我在不同示例中看到的方法
Fetch()
FetchMany()
。是否存在使用Linq到Nhibernate 3.2解决n+1问题的方法?
我的代码的简化版本

class News
{
    public virtual int Id { get; protected set; }
    public virtual DateTime Date { get; set; }
    public virtual Category Category { get; set; }
}

class Category
{
    public virtual int Id { get; protected set; }
    public virtual ISet<News> News { get; set; }
}
这就是没有冗余选择的原因:

var criteria = Session.CreateCriteria<News>();
criteria = criteria.AddOrder(Order.Desc(property));
criteria = criteria.SetMaxResults(pageSize).SetFirstResult((pageNumber - 1)*pageSize);
var news = criteria.List<News>();
var-criteria=Session.CreateCriteria();
criteria=criteria.AddOrder(Order.Desc(property));
criteria=criteria.SetMaxResults(pageSize).SetFirstResult((pageNumber-1)*pageSize);
var news=criteria.List();
试试这个:

criteria.SetFetchMode("Category",FetchMode.Eager);
或使用Linq:

session.Query<News>()
                .Fetch(k => k.Category)
                .Skip(n)
                .Take(m)
session.Query()
.Fetch(k=>k.Category)
.Skip(n)
.Take(m)
或者使用QueryOver:

var result = session.QueryOver<News>
                    .Fetch(x => x.Category).Eager
                    .List();
var result=session.QueryOver
.Fetch(x=>x.Category).Eager
.List();

如果您能告诉我们您使用的是哪个实体以及您要执行的查询,也许我们可以看看…@FelicePollano抱歉,现在代码在这里,它是用于标准的,但我需要使用LINQthank非常感谢您。我的错误在于我不正确地使用linq。这就是为什么我看不到LINQ、QueryOver和Criteria的
Fetch
+1。。。我们有选择!:)
session.Query<News>()
                .Fetch(k => k.Category)
                .Skip(n)
                .Take(m)
var result = session.QueryOver<News>
                    .Fetch(x => x.Category).Eager
                    .List();
var result = session.Query<News>()
                    .Fetch(x => x.Category)
                    .ToList();
var result = session.QueryOver<News>
                    .Fetch(x => x.Category).Eager
                    .List();