我有一个实体 A,它有一个名为 Bs 的 B 的 IList,B 有一个名为 Cs 的 C 的 IList。
我想搜索其中至少有 5 个 C 的所有 A。所以我去写了
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();
}
然而,在执行代码(并在范围变量中指定 Min )时,我得到以下异常:
NHibernate.QueryException:无法解析属性:Cs:A
为什么它在 A 上寻找 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();