Query NHibernate3 vs QueryOver

Query NHibernate3 vs QueryOver

QueryOver combina metodi di estensione ed espressioni lambda:

IList<Cat> cats =
    session.QueryOver<Cat>()
        .Where(c => c.Name == "Max")
        .List();

QueryOver è una tecnologia di query fortemente tipizzata costruita sulla base dell'API Criteria di NHibernate.

Puoi leggere maggiori informazioni qui e qui.

Per quanto ne so, alcune funzionalità del provider linq non sono ancora implementate.
Userei QueryOver .
Ti permette di scrivere codice elegante ed è completo di funzionalità.

Qualcosa che vale la pena leggere.


Interrogazione la sintassi è specifica di NHibernate, quindi ha molti metodi potenti che semplicemente non puoi abbinare in LINQ.

Come ha detto LeftyX, l'implementazione di LINQ per NH non è completa e ho avuto diversi mal di testa con essa. Ad esempio, recentemente ho riscontrato problemi nell'utilizzo della cache di 2° livello, dei valori Future e delle estensioni NH Spatial con LINQ, il tutto a causa di un'implementazione incompleta o di bug (senza menzionare le prestazioni di alcuni SQL generati, che a volte sono piuttosto orribili).

In tutti questi casi ho dovuto usare QueryOver e, dopo aver superato la curva di apprendimento, ha, IMHO, una sintassi molto più bella di LINQ.

Ma LINQ tramite Query ha anche vantaggi; come essere indipendente da ORM (che potrebbe sfruttare un'architettura di repository più pulita) e per query semplici è più che sufficiente.