Come lavori con istanze di queryover indipendenti?
-
28-10-2019 - |
Domanda
Questo NHIBERNATE BLOG VOT Note come distaccata QueryOver
query (analogo a DetachedCriteria
) può essere creato (usando QueryOver.Of<T>()
). Tuttavia, guardandolo, non mi sembra affatto analogo.
Con i criteri distaccati, creerei la mia istanza e la imposterei come ho bisogno, e successivamente la chiamata GetExecutableCriteria()
Per quindi assegnare la sessione ed eseguire la query. Con il "distaccato" QueryOver
, la maggior parte dell'API non è disponibile (cioè aggiungere restrizioni, unito, ordinare, ecc ...) fino a quando non chiamo GetExecutableQueryOver
, che richiede prende un ISession
o IStatelessSession
, a quel punto non sei più disconnesso.
Come lavori con il distacco QueryOver
istanze?
MODIFICARE:
Il problema effettivo era correlato al modo in cui sto memorizzando l'istanza di queryover indipendente:
public class CriteriaQuery<T>
{
internal protected QueryOver<T> _QueryOver { get; set; }
public CriteriaQuery()
{
_QueryOver = QueryOver.Of<T>();
}
// Snip
}
Dovrebbe essere un QueryOver<T, T>
.
Soluzione
Sto usando NHIBERNATE 3.1.0.4000. Il seguente codice compila correttamente:
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();
Ciò illustra l'utilizzo di restrizioni, giunti e ordini su una queryover indipendente proprio come faresti con una normale.
Potresti pubblicare il codice che dimostra le funzionalità API che non sono disponibili?