2010-12-05 18 views
0

Les didacticiels de nHibernate sont passés à la section sur les requêtes. Il semble qu'il y ait eu des changements depuis que cette série a été faite. Je suis donc allé à la documentation en ligne pour EPN 3.0 mais un code tel que:Requêtes nHibernate 3.0

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

génère l'erreur « Le nom « expression »n'existe pas dans le contexte actuel »

code comme:

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

Fonctionne mais il semble qu'il manque un certain nombre de méthodes de requête comme GtExpression. Les documents en ligne sont-ils à jour, et si oui, pourquoi ne puis-je pas utiliser Expression ... Si les documents en ligne ne sont pas à jour, où puis-je obtenir une description de l'interface Criterion? Merci

Répondre

3

Vous avez oublié d'ajouter using NHibernate.Criterion;.

Quoi qu'il en soit, la classe Expression est obsolète. Utilisez Restrictions à la place.

+0

Oui merci, il me manquait l'instruction using, et l'accent sur "Restrictions" est la raison pour laquelle la documentation m'avait confondu. –

+0

Veuillez marquer la réponse comme acceptée si elle a résolu votre problème. –

0

Chose étrange. J'utilise toujours Expression. * Les méthodes statiques et celles-ci fonctionnent toujours. Etes-vous sûr d'utiliser la dernière version de NH3.0? J'utilise la version Alpha 2.

Si vous avez besoin pour le faire fonctionner de toute urgence, nous allons essayer la QueryOver <> fonction:

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

Il fonctionne bien pour les requêtes simples