我正在使用条件API,查询我无法真正更改的映射文件。有一个根实体,其中有许多子实体加入,并且某些查询要求我们添加
criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);
以避免在由于连接而存在多个SQL结果行时获取重复实体。问题是现在我还想要应用别名到bean的转换器,如下所示:
criteria.SetResultTransformer(Transformers.AliasToBean(typeof(MyDto)));
使用这些中的任何一个都很棒。但是,我需要将它们组合在一起:我只想将所需的列加载到DTO对象中,并且只获取不同的根实体。我怎么能这样做?
答案 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();