2011-06-21 18 views
0

Projectionを使ってLeadクラスからDTOを作成しようとしています。私のDTOには、自宅の電話番号、携帯電話番号、電子メールアドレスなどがありますが、リードクラスには連絡先の詳細が集められています。だから、私はdtoのプロパティを設定できるように各連絡先の詳細を取得する方法を見つけることを試みています。サブクエリと予測を使用しようとしましたが、無駄です。NHibernate SetProjectionを使って個々のコレクションアイテムを取得する

私は生成しようとしているSQLはこのようなものである:だから要するに、私は別の基準に基づいて、同じテーブルに3回に参加しようとしている、と私はNHibernateの中にいることを知っている

SELECT 
    A.LeadId, 
    B.ContactId, 
    B.Value, 
    C.ContactId, 
    C.Value, 
    D.ContactId 
FROM Lead A 
LEFT JOIN ContactDetail B ON A.LeadId=B.LeadId AND B.ContactType='Home Number' 
LEFT JOIN ContactDetail C ON A.LeadId=C.LeadId AND C.ContactType='Mobile Number' 
LEFT JOIN ContactDetail D ON A.LeadId=D.LeadId AND D.ContactType='Email Address' 

CreateAliasを使用して同じテーブルに複数回参加することはできません。Criteria APIまたはNHIbernate Linqを使用してこれが可能かどうかを知りたいです。助けを前にありがとう。

答えて

0

nHibernateの「標準」リードインスタンスを連絡先の詳細のコレクションとともにロードします。次に、AutoMapperを使ってDTOクラスにマップします。

「シンプルな」DTOマッピング用の特別なデータアクセスメソッドを作成しないので、これははるかにクリーンなアプローチです。すべてが "シャープコード"で表現されているので、リファクタリングが簡単です。

AutoMapper

へのリンク
関連する問題