Sto usando questa query:evitare inutili croce si unisce nella query conteggio di codice SQL generato
return from oi in NHibernateSession.Current.Query<BlaInteraction>()
select new BlaViewModel
{
...
NoPublications = oi.Publications.Count(),
...
};
BlaInteraction contiene un IList di pubblicazioni (vale a dire le entità). Per determinare il numero di pubblicazioni non è davvero necessario fare tutti i join per una pubblicazione. Posso impedire che nhibernate utilizzi i join nello sql generato (ad esempio utilizzando la proiezione ???) in qualche modo?
Grazie.
Christian
PS:
Questo è ciò produce NH (leggermente adattato):
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_, Publication publicatio22_ inner join Statements publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId where publicatio21_.StatementId = 22762181 and publicatio21_.PublicationId=publicatio22_.StatementId
Questo è quello che sarebbe sufficiente:
select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181
Sai che * è * idratare le pubblicazioni? Che cosa dice SQL Profiler in realtà viene eseguito sul server? – AakashM
Grazie - mi dispiace, hai ragione. I join non hanno nulla a che fare con 'idratazione'. Ho modificato la domanda e aggiunto alcuni sql. – cs0815
(non un esperto osceno) il fatto che genera un implciti 'CROSS JOIN' (le tabelle nella clausola' FROM' che non sono esplicitamente unite) suggerisce che NHibernate non ha una certa conoscenza delle relazioni tra gli oggetti; tuttavia, vorrei prima controllare i piani di esecuzione SQL della sua query e la query ideale - potrebbe essere che * SQL Server * sia in grado di calcolare la cosa più semplice. – AakashM