NHibernate3 Query vs QueryOver [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Me di cuenta de que hay dos maneras de crear un agradable acceso genérico amigable a nhibernate.

IQueryOver<T, T> query= session.QueryOver<T>().Where(criteria);

Y

IQueryable<T> query= session.Query<T>().Where(criteria);

Implementaciones de cada interfaz.

IQueryOver<TRoot, TSubType> : IQueryOver<TRoot>, IQueryOver

Y

IQueryable<out T> : IEnumerable<T>, IQueryable, IEnumerable

Implementos IQueryable umumerable, por lo tanto, soporta todas las cosas LINQ amigables que usted esperaría. Estoy tendiendo hacia esta implementación, pero me preguntaba si alguien sabía cuál era el propósito de QueryOver que no se puede lograr con Query?

Author: Ty., 2011-03-16

2 answers

QueryOver combina métodos de extensión y expresiones lambda:

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

QueryOver es una tecnología de consulta fuertemente tipada construida sobre la API de criterios de NHibernate.

Usted puede leer más información aquí y aquí.

Por lo que sé, algunas características del proveedor linq aún no están implementadas.
Usaría QueryOver.
Le permite escribir código elegante y está completamente equipado.

Algo que valga la pena leer .

 30
Author: LeftyX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-23 09:22:27

La sintaxis de QueryOver es específica de NHibernate, por lo que tiene muchos métodos poderosos que simplemente no puede coincidir en LINQ.

Como dijo LeftyX, la implementación de LINQ para NH no está completa, y he tenido varios dolores de cabeza con ella. Por ejemplo, recientemente tuve problemas usando la caché de nivel 2, los valores futuros y las extensiones espaciales NH con LINQ, todo debido a una implementación incompleta o errores (y no mencionar el rendimiento de algunos SQL generados, que a veces es bastante horrible).

En todos estos casos tuve que usar QueryOver, y después de superar la curva de aprendizaje, tiene, en mi humilde opinión, una sintaxis mucho más agradable que LINQ.

Pero LINQ vía Query también tiene ventajas; como ser agnóstico OR (que podría aprovechar una arquitectura de repositorio más limpia), y para consultas simples es más que suficiente.

 15
Author: psousa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-12 01:09:41