Question

I normalement interfaces de requête à l'aide de DetachedCriteria dans Hibernate:

DetachedCriteria crit = DetachedCriteria.For<IParent>();

Et ce beau des travaux.

Je veux maintenant créer une sous-requête pour un objet enfant ainsi:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>();

et l'ajouter aux critères comme celui-ci (un peu, p.Child est en fait un alias, mais je l'ai simplifié) :

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));

Cela fonctionne si mon DetchedCriteria est un enfant:

DetachedCriteria subcrit = DetachedCriteria.For<Child>();

mais pas c'est pour l'interface (comme ci-dessus). Dans ce cas, je reçois une exception:

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild

Est-ce quelque chose qui est censé être ou que je manque une config?

Était-ce utile?

La solution

Je ne pense pas que vous seriez en mesure de requête sur l'interface dans ce cas parce que NHibernate ne serait pas en mesure de trouver la bonne classe implémentant vous l'intention de requête contre. Par exemple, supposons que vous avez une autre de iChild appelé implémenteur ChildLight (ou quelque chose qui est mis en correspondance avec une autre table), NHibernate n'a pas de direction pour laquelle la classe mise en œuvre pour récupérer.

Vous devez créer un DetachedCriteria.For () plutôt que de l'interface.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top