У меня есть объект A, у которого есть IList из B под названием Bs, а у B есть IList из C, который называется Cs.
Я хочу найти все А, которые имеют по крайней мере 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();
}
Однако, выполнив код (и указав Min в переменной диапазона), я получаю следующее исключение:
NHibernate.QueryException: не удалось разрешить свойство: Cs of: A
Почему он ищет свойство B на A? Тем не менее, сопоставления кажутся правильными:
(Свободное) отображение на 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();