2011-06-21 24 views
0

我想使用投影從Lead類創建DTO。例如,我的DTO有一個家庭電話號碼,一個手機號碼和一個電子郵件地址,但是Lead Class有一組聯繫信息。所以我試圖找到一種方法來檢索每個聯繫人詳細信息,以便我可以在dto上設置屬性。我曾嘗試使用子查詢和預測,但無濟於事。NHibernate使用SetProjection來檢索個人收藏項目

我試圖生成SQL是這樣的:

在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' 

因此,在短期我試圖根據不同的標準加入到同一個表的3倍,我知道我無法使用CreateAlias多次連接到同一個表,我急於知道這是否可以使用Criteria API或NHIbernate Linq。預先感謝您的幫助。

回答

0

我會從nHibernate中加載其「聯繫人詳細信息」集合中的「常規」主要實例。然後我將使用AutoMapper將其映射到DTO類。

在我看來,這是一個非常乾淨的方法,因爲您不需要爲「簡單」DTO映射創建特殊的數據訪問方法。而且它更容易重構,因爲所有內容都是通過「c sharp code」表達的。

鏈接到AutoMapper