2016-02-26 2 views
0

Tenir compte des entités suivantes:FluentNHibernate Many-to-Many conditionnel Vous pouvez compter sur l'enfant

Package  Manifest  Content 
----------  ----------  ----------  
Id    PackageId  Id 
Name   ContentId  Name 
           Status 

La relation est beaucoup à plusieurs où un paquet peut avoir des contenus multiples et le contenu peut appartenir à plusieurs paquets.

Ce que je voudrais faire est, pour un Package.Id donné, obtenir le compte de tous Content qui ont un Status spécifique.

Mon mappage fonctionne correctement, mais je n'ai pas réussi à comprendre comment obtenir un nombre conditionnel de Content sans charger le Content. Une option consiste à utiliser un ApplyChildFilter dans le mappage et à l'utiliser avec ExtraLazyLoad, mais cela signifie que je devrais créer une propriété dédiée uniquement pour cela.

Y a-t-il un moyen d'y parvenir sans retomber sur CreateSQLQuery?

Répondre

0

La requête suivante fonctionne-t-elle pour vous?

session 
    .QueryOver<Package>() 
    .JoinQueryOver(x => x.Manifest) 
    .JoinQueryOver(x => x.Content) 
    .Where(x => x.Status == someStatus) 
    .Select(Projections.RowCount()) 
    .FutureValue<int>() 
    .Value 
+0

la question est que le manifeste n'est pas explicitement mis en correspondance car il est implicitement mappé via 'HasManyToMany.Table ("Manifest"). ParentKeyColumn ("IDPack"). ChildKeyColumn ("contentId")'. Je pense que votre proposition fonctionnerait si j'ajoutais un mappage explicite et une propriété pour le manifeste, mais j'espérais pouvoir éviter cela (pour l'instant, il suffit d'utiliser SQL pour faire ce JOIN). –