用于子集合的NHibernate DistinctRootEntity变换器

时间:2010-10-22 17:11:21

标签: nhibernate

我有一个根实体(IList<RootEntity>)的集合,它是使用ICriteria API从NHibernate调用返回的。 RootEntity有一组子实体,我们可以调用IList<Child1Entity>Child1Entity有一组子实体(IList<Child2Entity>),作为第三层,会导致Child1Entity集合重复。

我的问题是如何将重复数据删除过程应用于子集合。

我有重复的原因是因为我在子集合上使用LeftOuterJoin。我无法删除LeftOuterJoin。

使用以下代码连接每个子表:

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);

谢谢!

1 个答案:

答案 0 :(得分:-1)

我最终为子集合编写了一个内存过滤器。 NHibernate目前不支持我正在寻找的功能。

感谢您的光临。