NHibernate:结合变换器?

jon*_*iba 1 nhibernate nhibernate-criteria

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

criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity);
Run Code Online (Sandbox Code Playgroud)

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

criteria.SetResultTransformer(Transformers.AliasToBean(typeof(MyDto)));
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*and 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();
Run Code Online (Sandbox Code Playgroud)