2009-10-21 7 views
0

Mes entités regardent quelque chose comme ça (simplifié):Comment récupérer des entités uniques via l'API NHibernate Criteria?

public class Person 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 

    public IList<Department> Departments { get; set; } 
} 

public class Department 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
} 

Je suis interroge la base grâce à des critères api pour toutes les personnes qui ont un ministère avec un certain nom qui doit correspondre à un modèle comparable.

Il arrive qu'une personne contienne deux ou plusieurs départements dont les noms contiennent la même séquence de caractères que celle utilisée par la requête. Par conséquent, la même personne est renvoyée plusieurs fois. Pour étayer cela, je sais que je peux utiliser criteria.SetResultTransformer(Transformers.DistinctRootEntity); mais cela ne fonctionne que tant que le résultat n'est pas paginé.

Lorsque je pagine le résultat, je n'ai pas seulement besoin de la première page, mais j'ai aussi besoin de savoir combien d'entités il y a au total. Malheureusement, le transformateur de résultat ne fonctionne pas lorsque vous appelez criteria.SetProjection(Projections.RowCount()) car il n'y a pas de résultat à transformer. Puis-je d'une manière ou d'une autre éviter de récupérer la liste complète des personnes avec le transformateur de résultat, puis retirer manuellement la bonne partie de la collection?

Cordialement
Oliver Hanappi

Répondre

1

Vous devez inclure dans votre demande distincte sql. Quelques informations vous pouvez trouver here. Deuxième réponse principalement

+0

Lorsque j'utilise distinctes seules seront retournées les colonnes qui sont incluses dans la projection distincte. Est-ce que NHibernate interrogera la base de données une autre fois pour obtenir toutes les données? –

+0

Quelles sont toutes les données? Comme je peux le voir, vous n'avez besoin que d'un nombre de lignes ou que voulez-vous dire? – Sly

+0

Ah, je vois ce que vous voulez dire! Il y a toujours un problème: lors de l'obtention de résultats paginés, il sera récupéré par ex. 25 personnes Après cela, le transformateur de résultat est appliqué et, par ex. 3 personnes sont enlevées. Ensuite, ma requête renverrait 22 personnes ou je me trompe? –

Questions connexes