2010-12-05 3 views
0

Работа над летом учебников nHibernate попала в раздел по запросам. Кажется, произошли изменения с тех пор, как эта серия была сделана. Так что я пошел в онлайн-документации для НЖБ 3.0, но код, такой как:nHibernate 3,0 запросов

IList cats = session.CreateCriteria(typeof(Cat)) 
      .Add(Expression.Like("Name", "Fritz%")) 
      .Add(Expression.Between("Weight", minWeight, maxWeight)) 
      .List(); 

Генерирует ошибку «Имя„Выражение“не существует в текущем контексте»

Код типа:

return session.CreateCriteria(typeof(DataTransfer.Customer)) 
      .Add(new NHibernate.Criterion.LikeExpression("Firstname", firstname)) 
      .Add(new NHibernate.Criterion.LikeExpression("Lastname", lastname)) 
      .List<Customer>(); 

Работает, но кажется, что отсутствует количество методов запроса, таких как GtExpression. Являются ли онлайн-документы актуальными, и если да, то почему я не могу использовать Expression ... Если онлайн-документы не обновлены, то откуда я могу получить описание интерфейса Criterion? Thanks

ответ

3

Вы забыли добавить using NHibernate.Criterion;.

В любом случае, класс Expression устарел. Вместо этого используйте Restrictions.

+0

Да, спасибо, мне не хватало используемого заявления, и акцент на «ограничениях» - вот почему документация меня смутила. – 2010-12-06 03:01:10

0

Weird thing. Я все еще использую Expression. * Статические методы, и они все еще работают. Вы уверены, что используете последнюю версию NH3.0? Я использую версию Alpha 2.

Если вам нужно, чтобы сделать его работу срочно, давайте попробуем> функцию QueryOver <:

return session.QueryOver<DataTransfer.Customer>() 
    .WhereRestrictionOn(u => u.Name).IsLike("Fritz%") 
    .AndRestrictionOn(u => u.Weight).IsBetween(minWeight).And(maxWeight) 
    .List(); 

Это хорошо работает для простых запросов