NHibernate使用SetProjection检索单个集合项

时间:2011-06-21 20:21:36

标签: nhibernate criteria-api

我正在尝试使用Projections从Lead类创建DTO。例如,我的DTO有家庭电话号码,手机号码和电子邮件地址,但Lead Class有一系列联系方式。所以我试图找到一种方法来检索每个联系人细节,以便我可以在dto上设置属性。我尝试过使用子查询和预测,但无济于事。

我试图生成的SQL是这样的:

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次,我知道在NHibernate中我不能使用CreateAlias不止一次加入同一个表,我很想知道是否可以使用Criteria API或NHIbernate Linq。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我会从nHibernate加载“常规”主要实例及其联系人详细信息集合。然后我会使用AutoMapper将它映射到DTO类。

在我看来,这是一种更清晰的方法,因为您不为“简单”DTO映射创建特殊的数据访问方法。而且重构更容易,因为所有内容都通过“急剧代码”来表达。

链接到AutoMapper