Ограничение Критерии NHibernate и Выражение
Если я ищу примеры 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>();
Ответы
Ответ 1
Я думаю, что ограничения были выпущены в NH2 и теперь предпочтительнее.
В соответствии с Resharper всякий раз, когда я использую выражение, я получаю подсказку, чтобы сказать Access to a static member of a type via a derived type
Также в соответствии с этим сообщением от Ayende: -
Предпочитают вместо этого использовать ограничения класса Expression для определения Запросы критериев.
Ответ 2
В исходном коде для namespace NHibernate.Criterion.Expression
говорится, что "этот класс является устаревшим ограничением использования"
Ответ 3
Выражение наследуется от ограничений, но рекомендуется использовать ограничения. Выражение явно не рекомендуется.
Согласно Ayende (старое сообщение о NH 2.0), документация обычно относится к ограничениям.