left nhibernate nhibernate-criteria

left - Restricción de criterios de NHibernate frente a expresión



nhibernate session createquery (3)

Si busco ejemplos de consulta API de NHibernate Criteria en Internet, hay ejemplos que usan Restricciones y otros usan Expresión. ¿Cuáles son las diferencias entre esos dos?

Por ejemplo:

posts = session.CreateCriteria<Post>() .Add(Expression.Eq("Id", 1)) .List<Post>(); posts = session.CreateCriteria<Post>() .Add(Restrictions.Eq("Id", 1)) .List<Post>();


Creo que las restricciones se lanzaron en NH2 y ahora es la forma preferida.

De acuerdo con Resharper cada vez que uso Expression, recibo una pista para decir Access to a static member of a type via a derived type

También según este post de Ayende:

Prefiere usar las Restricciones en lugar de la clase de Expresión para definir consultas de Criterios.


En el código fuente para el namespace NHibernate.Criterion.Expression de namespace NHibernate.Criterion.Expression se dice que "Esta clase es restricciones de uso semidegradadas"


La expresión hereda de Restricciones pero se recomienda usar Restricciones. La expresión es aparentemente obsoleta.

Según Ayende (publicación anterior sobre NH 2.0) , la documentación generalmente se referirá a Restricciones.