2010-10-22 6 views
1

J'ai une collection d'entités racines (IList<RootEntity>) qui est renvoyée à partir d'un appel NHibernate en utilisant l'API ICriteria. RootEntity a une collection d'entités enfants, appelons cela IList<Child1Entity>. Child1Entity a une collection d'entités enfants (IList<Child2Entity>), qui, étant la troisième couche, provoque la duplication de la collection Child1Entity.Transformateur NHibernate DistinctRootEntity pour la sous-collection

Ma question est de savoir comment puis-je appliquer le processus de déduplication à la collecte des enfants.

La raison pour laquelle je doublons est parce que je suis en utilisant LeftOuterJoin sur les collections enfants. Je ne peux pas enlever LeftOuterJoin.

Chacun des sous-tables sont jointes utilisant le code suivant:

ICriteria rootCriteria = session.CreateCriteria(typeof(RootEntity)); 

rootCriteria.CreateCriteria("Child1Collection", "Child1CollectionAlias", NHibername.SqlCommand.JoinType.LeftOuterJoin); 

rootCriteria.CreateCriteria("Child1CollectionAlias.Child2Collection", "Child2CollectionAlias", NHibername.SqlCommand.JoinType.LeftOuterJoin); 

rootCriteria.Add(Expression.Eq("Child2CollectionAlias.Property", value)); 

rootCriteria.SetResultTransformer(DistinctRootEntity); 

Merci!

+0

Pouvez-vous montrer le code? Vous ne devriez pas avoir de duplication dans la collection enfant, sauf s'il y a autre chose que vous ne nous dites pas. –

+0

Mise à jour ma question. Il y a une autre couche d'enfants que j'ai oublié de mentionner dans la question. – a432511

Répondre

-1

J'ai fini par écrire un filtre en mémoire pour les collections enfants. NHibernate ne supporte pas actuellement la fonctionnalité que je recherchais.

Merci de votre visite.

+0

Pouvez-vous s'il vous plaît poster votre code? –

Questions connexes