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?

¿Fue útil?

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 () en lugar de la interfaz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top