J'ai l'entité A qui a un IList de B appelé Bs et B a un IList de C appelé Cs.LINQ to NHibernate ne peut pas accéder aux enfants
Je veux rechercher tous les A qui ont au moins 5 C en eux. Je suis donc allé et écrit
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();
}
Cependant lors de l'exécution du code (et ayant min spécifié dans la variable de gamme) Je reçois l'exception suivante:
NHibernate.QueryException: ne pouvait pas résoudre la propriété: Cs de: A Pourquoi recherche-t-il la propriété B sur A? Les applications semblent avoir raison si:
Le (courant) cartographie sur A dit:
//...
HasMany(a => a.Bs)
.Table("Bs")
.KeyColumn("IdA")
.Cascade.AllDeleteOrphan()
.Inverse()
.Not.LazyLoad();
//...
et sur la cartographie sur B dit:
//...
HasMany(b => b.Cs)
.Table("Cs")
.KeyColumn("IdB")
.Cascade.AllDeleteOrphan()
.Inverse()
.Not.LazyLoad();
References(b => b.A, "IdA")
.Not.LazyLoad();
//...
enfin sur la mise en correspondance sur C:
References(c => c.B, "IdB").Not.LazyLoad();
Vous pouvez aussi essayer le nouveau fournisseur Linq dans le coffre NHibernate. Le fournisseur NHContrib Linq a des fonctionnalités plus limitées. –
J'ai le dernier fournisseur LINQ du tronc NHibernate et il ne résout pas mon problème: (((( –