2011-09-08 8 views
7

Este NHibernate blog entry señala cómo se pueden crear consultas separadas QueryOver (análoga a DetachedCriteria) (utilizando QueryOver.Of<T>()). Sin embargo, al mirar esto, no me parece en absoluto análogo.¿Cómo se trabaja con instancias separadas de QueryOver?

Con DetachedCriteria, crearía mi instancia y la configuraría como fuera necesario, y luego llamaría al GetExecutableCriteria() para asignar la sesión y ejecutar la consulta. Con el "detached" QueryOver, la mayor parte de la API no está disponible (es decir, para agregar restricciones, uniones, pedidos, etc.) hasta que llamo al GetExecutableQueryOver, lo que requiere toma un ISession o IStatelessSession, momento en el que ya no estará desconectado .

¿Cómo se trabaja con instancias separadas de QueryOver?

EDIT:

problema real está relacionada con la forma en que estoy almacenar la instancia QueryOver individual:

public class CriteriaQuery<T> 
{ 
    internal protected QueryOver<T> _QueryOver { get; set; } 

    public CriteriaQuery() 
    { 
     _QueryOver = QueryOver.Of<T>(); 
    } 

    // Snip 
} 

Debe ser una QueryOver<T, T>.

+0

¿Cuál fue el problema real que menciona a continuación? – ruffin

+0

'QueryOver ' no tiene la API que esperaba; 'QueryOver ' es lo que necesitaba. –

Respuesta

12

Estoy usando NHibernate 3.1.0.4000. El siguiente código se compila correctamente:

Employee salesRepAlias = null; 

var query = QueryOver.Of<Customer>() 
    .JoinAlias(x => x.SalesRep,() => salesRepAlias) 
    .Where(x => x.LastName == "Smith") 
    .Where(() => salesRepAlias.Office.Id == 23) 
    .OrderBy(x => x.LastName).Asc 
    .ThenBy(x => x.FirstName).Asc; 

return query.GetExecutableQueryOver(session) 
    .List(); 

Esto ilustra el uso de restricciones, se une a, y ordenar en un QueryOver adosado al igual que lo haría con uno normal.

¿Podría publicar el código que demuestra las características de la API que no están disponibles?

+0

Seleccionó su respuesta y agregó el problema real a la pregunta, porque su publicación me empujó hacia el problema. Gracias. –

Cuestiones relacionadas