2010-01-27 4 views
0

J'essaie d'écrire un critère NHibernate qui se joint et se restreint en même temps. Mon DB ressemble à ceci ...Critères de jointure et de restriction NHibernate

Cas ---> CustomerProducts < --- Clients Cas ---> CaseStatuses

Chaque cas est associé à un produit client (De nombreux cas à un produit).

Chaque client a un certain nombre de produits client (un client a de nombreux produits client).

Chaque cas a en plus un statut de cas (un cas à plusieurs cas).

Cela a été cartographié avec des fichiers XML et plusieurs à plusieurs résolution entre les cas et les clients (par le biais de produits client) a été résolu avec un jeux <> dans le sens cartographie CustomerProduct que l'entité CustomerProduct a des ensembles:

Les clients

Cas

Je puis DEVENEZ critères tapés « affaires ». Les critères que je dois appliquer sont ....

  1. États IN [différents codes d'état]. Cela a été réalisé avec ....

    critères.Add (Restrictions.In ("CaseStatus.CaseStatusId", statuses));

  2. Maintenant, je dois sélectionner uniquement les cas pour un identifiant client spécifique. J'ai essayé ...

    critères.Ajouter ("CustomerProduct.Customer.CustomerId", customerId);

Ce travail ne marche pas et NHibernate me dit qu'il ne peut pas résoudre le mappage CustomerProduct.Customer.CustomerId.

Case a la propriété d'un objet CustomerProduct.

CustomerProduct a la propriété d'un objet Client.

Le client a la propriété CustomerId.

Des idées pourquoi ça ne marchera pas?

Merci.

Répondre

4

Je pense que vous devez créer un alias pour CustomerProduct.Customer:

criteria.CreateAlias("CustomerProduct", "customerProduct"); 
criteria.CreateAlias("customerProduct.Customer", "customer"); 
criteria.Add(Restrictions.Eq("customer.CustomerId", customerId)); 

Je suis surpris la restriction a travaillé sans alias. Voici un good article sur l'exécution de requêtes de jointure avec l'API Criteria.

+0

Fonctionne parfaitement! Merci beaucoup. – Remotec

Questions connexes