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!
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. –
Mise à jour ma question. Il y a une autre couche d'enfants que j'ai oublié de mentionner dans la question. – a432511