2012-03-25 10 views
1

私は本当に変更できないマッピングファイルに対してクエリを実行して、条件APIを使用しています。多くの子実体を持つルートエンティティがそれに加わり、特定のクエリのジョインによる複数のSQL結果ラインがある場合、重複するエンティティを避けるために、NHibernate:結果のトランスフォーマーを組み合わせる?

criteria.SetResultTransformer(CriteriaSpecification.DistinctRootEntity); 

を追加するために私たちを必要としているがあります。問題は、次のようにエイリアスとビーンのトランスフォーマーを適用することです。

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

これらのいずれかを使用すると効果的です。しかし、私はそれらを組み合わせる必要があります:DTOオブジェクトに必要な列だけをロードし、別個のルートエンティティだけを取得したい。これどうやってするの?

答えて

5

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(); 
+0

はいを​​次のようにDistinctEntityRootTransformerで投影を使用することができますDTOにのみ必要な列をロードするには!ありがとう、ロック! – joniba

+4

「DistinctEntityRootTransformer」が表示されません... –

関連する問題