LINQ NHibernate的不能得到孩子的孩子(LINQ to NHibernate can&#

2019-09-29 15:17发布

我有具有B的一个IList称为烧烤和B具有C的IList中称为Cs的实体A。

我想搜索所有A的具有至少5℃的在其中。 于是我就写了

using (var s = this._sessionFactory.OpenSession())
{
    IQueryable<A> q = s.Linq<A>();
    // some code...
    if (range.Min.HasValue)                    
        q = q.Where(a => a.Bs.Sum(b => b.Cs.Count) >= range.Min.Value);
    // some code...
    return q.Select(b=>b).ToArray();
 }

然而在执行代码(和具有最小值的范围内变量指定),得到类似如下异常:

NHibernate.QueryException:无法解析属性:答:铯

为什么它看起来为B的一个属性? 该映射似乎是正确的,但:

A上的(流利)映射说:

//...
HasMany(a => a.Bs)
 .Table("Bs")
 .KeyColumn("IdA")
 .Cascade.AllDeleteOrphan()
 .Inverse()
 .Not.LazyLoad();
//...

和B上的映射说:

//...
HasMany(b => b.Cs)
 .Table("Cs")
 .KeyColumn("IdB")
 .Cascade.AllDeleteOrphan()
 .Inverse()
 .Not.LazyLoad();
References(b => b.A, "IdA")
 .Not.LazyLoad();
//...

最后在C上的映射:

References(c => c.B, "IdB").Not.LazyLoad();

Answer 1:

LINQ NHibernate的是伟大的,制作简单的查询很容易做到。 但是,当你需要做复杂的查询(如这一个)通常最好切换到标准API或HQL。 您在您的处置3种的查询方法,使用它们。

话虽这么说,一旦NHibernate的3.0被释放有可能做到使用LINQ此查询。



Answer 2:

你不能用的LINQ to NHibernate的2.X做



文章来源: LINQ to NHibernate can't get to children's children