Usando una interfaz para una subconsulta en NHibernate
-
30-09-2019 - |
Pregunta
Normalmente interfaces de consulta utilizando DetachedCriteria en NHibernate:
DetachedCriteria crit = DetachedCriteria.For<IParent>();
Y esto funciona bien.
Ahora quiero crear una sub consulta de un objeto secundario de este modo:
DetachedCriteria subcrit = DetachedCriteria.For<IChild>();
y añadirlo a los criterios como esto (una especie de, p.Child es en realidad un alias, pero he simplificado)
crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));
Estos trabajos si mi DetchedCriteria es para un niño:
DetachedCriteria subcrit = DetachedCriteria.For<Child>();
pero no lo es para la interfaz (como el anterior). En ese caso me sale una excepción:
NHibernate.MappingException: No persister for: Domain.Name.Space.IChild
Es esto algo que está destinado a ser o me estoy perdiendo algo de configuración?
Solución
No creo que sería capaz de consulta en la interfaz en este caso porque NHibernate no sería capaz de encontrar la clase que implementa la derecha está la intención de consulta contra. Por ejemplo, suponga que tiene otro ejecutor de iChild llama ChildLight (o algo que está asignado a una tabla diferente), NHibernate no tiene sentido para el cual la implementación de la clase para recuperar.
Es necesario crear un DetachedCriteria.For