Restricción de Criterios NHibernate vs Expresión


Si busco ejemplos de consulta de API de criterios NHibernate en Internet, hay ejemplos que usan Restricciones y otros usan Expresiones. ¿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>();
Author: Rippo, 2011-03-30

3 answers

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

De acuerdo con Resharper cada vez que uso la expresión me da 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 su lugar de la clase de expresión para definir Consultas de criterios.

 17
Author: Rippo,
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
2011-03-30 08:03:21

En el código fuente de namespace NHibernate.Criterion.Expression se dice que"Esta clase es Restricciones de uso semi-obsoletas"

 14
Author: Benjamin,
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
2011-03-30 10:45:50

La expresión hereda de Restricciones, pero se recomienda usar Restricciones. La expresión está aparentemente en desuso.

De acuerdo con Ayende (antiguo post sobre NH 2.0), la documentación generalmente se referirá a Restricciones.

 1
Author: Florian Lim,
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
2011-03-30 08:02:38