Ограничение критериев NHibernate против выражения - PullRequest
23 голосов
/ 30 марта 2011

Если я ищу примеры запросов API NHibernate Criteria в Интернете, есть примеры, в которых используются ограничения, а другие используют выражение.Каковы различия между этими двумя?

Например:

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

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

Ответы [ 3 ]

18 голосов
/ 30 марта 2011

Я думаю, что ограничения были выпущены в NH2, и теперь это излюбленный способ.

Согласно Resharper, всякий раз, когда я использую Expression, я получаю подсказку, чтобы сказать Access to a static member of a type via a derived type

Также в соответствиик этому сообщению от Ayende: -

Предпочитают использовать Ограничения вместо класса Expression для определения критериев запросов.

14 голосов
/ 30 марта 2011

В исходном коде для namespace NHibernate.Criterion.Expression написано, что «Этот класс является полу-устаревшим ограничением использования»

1 голос
/ 30 марта 2011

Выражение наследуется от Ограничений, но рекомендуется использовать Ограничения.Выражение явно устарело.

Согласно Айенде (старый пост о NH 2.0) , документация обычно ссылается на ограничения.

...