visual tutorial studio framework c# nhibernate orm

c# - tutorial - NHibernate3 Query vs QueryOver



nhibernate visual studio 2017 (2)

Esta pregunta ya tiene una respuesta aquí:

Noté que hay dos formas de crear un acceso amigable genérico para 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

IQueryable implementa IEnumerable, por lo tanto, es compatible con todas las cosas amigables con LINQ 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.


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 QueryOver construida sobre la API de criterios de NHibernate.

Puedes leer más información here y here .

Por lo que sé, algunas características del proveedor de linq aún no están implementadas.
Yo usaría QueryOver .
Te permite escribir código elegante y está completamente presentado.

Algo que vale reading pena reading .


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

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

En todos estos casos tuve que usar QueryOver, y después de superar la curva de aprendizaje, tengo, IMHO, una sintaxis mucho más agradable que LINQ.

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