2009-09-04 4 views
3

Je me demandais si quelqu'un pouvait aider avec un exemple de critère pour nhibernate. Je pense que je me concentre sur des choses assez basiques, comme trouver des enregistrements dans une table donnée dont le champ correspond à une certaine valeur, etc. Où je suis actuellement en train de trébucher, vous avez une table avec une clé étrangère pour une autre table. tenter de trouver des lignes de la première table en fonction d'un champ de la seconde table.Criteria building nhibernate

À titre d'exemple ...

Si je

tblUser 
pk int ID 
    int CompanyID 
    string Name 

et

tblCompany 
pk int  ID 
    string CompanyName 

Comment puis-je construire des critères pour récupérer tous les utilisateurs qui appartiennent à une société avec un nom ? Je pense que je comprends comment construire des fichiers/objets de mapping appropriés, je n'arrive pas à comprendre comment faire en sorte que les critères se comparent aux sous-propriétés de l'objet initial.

Tous les exemples seraient géniaux.

Répondre

10

Critères ne peuvent pas regarder sous-propriétés directement, donc si vous voulez accéder à un sous-propriété, vous devez utiliser un alias

session.CreateCriteria<User>() 
    .CreateAlias("Company", "c") //the first argument is the property name from User 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 

En outre, la même restriction sur les propriétés imbriquées existe pour les alias, donc, si vous aviez l'utilisateur -> entreprise -> Propriétaire vous aurait besoin de deux alias

.CreateAlias("Company", "c") 
.CreateAlias("c.Owner", "o") 

, si vous préférez également utiliser des alias pour toute requête, vous pouvez donner à l'entité racine un alias et lors de la création des critères.

session.CreateCriteria<User>("u") 
    .CreateAlias("u.Company", "c") 
    .Add(Restrictions.Eq("c.Name", companyName)) 
    .List<User>(); 
+1

Vous mon homme est un champion, a travaillé parfaitement. – Adam

+0

Merci pour la réponse, KeeperOfTheSoul! Tu m'as sauvé du temps. C'est une bonne chose que tu ne sois pas ici avec moi parce que je te ferais du mal si fort que tes bras se casseraient sur les avant-bras et que le garçon serait un gâchis à nettoyer. Encore une fois, merci pour l'aide! – SquidScareMe

Questions connexes