Bs と呼ばれる B の IList を持つエンティティ A と、Cs と呼ばれる C の IList を持つエンティティ A があります。
少なくとも 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 of: A
A の B のプロパティを探すのはなぜですか? ただし、マッピングは正しいようです:
A の (Fluent) マッピングは次のように述べています。
//...
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();