NHibernate:结合变换器?

时间:2012-03-25 15:54:15

标签: nhibernate nhibernate-criteria

我正在使用条件API,查询我无法真正更改的映射文件。有一个根实体,其中有许多子实体加入,并且某些查询要求我们添加

criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);

以避免在由于连接而存在多个SQL结果行时获取重复实体。问题是现在我还想要应用别名到bean的转换器,如下所示:

criteria.SetResultTransformer(Transformers.AliasToBean(typeof(MyDto)));

使用这些中的任何一个都很棒。但是,我需要将它们组合在一起:我只想将所需的列加载到DTO对象中,并且只获取不同的根实体。我怎么能这样做?

1 个答案:

答案 0 :(得分:5)

要将所需列加载到DTO,您可以使用DistinctEntityRootTransformer进行投影,如下所示

ICriteria criteria = session.CreateCriteria(typeof(YourEntity));
criteria.SetProjection(
Projections.Distinct(Projections.ProjectionList()
    .Add(Projections.Alias(Projections.Property("Property"), "Property")));

criteria.SetResultTransformer(
new NHibernate.Transform.AliasToBeanResultTransformer(typeof(MyDto)));

IList list = criteria.List();