具有已知类型的AliasToBean DTO

时间:2014-05-20 16:27:26

标签: nhibernate

我发现使用AliasToBean转换器的所有示例都使用会话CreateSqlQuery方法而不是CreateQuery方法。它们也只返回基本值类型,而不返回现有映射类型的任何对象。

我希望我的DTO可能具有我的一个映射域对象的属性,如下所示,但我没有得到牵引力。我得到以下异常:

  

在类'namespace.DtoClass'

中找不到属性'0'的setter

我的选择在我的映射类上看起来如下(我已经确认映射正确):

SELECT 
fcs.MeasurementPoint, 
fcs.Form, 
fcs.MeasurementPoint.IsUnscheduled as ""IsVisitUnscheduled"", 
fcs.MultipleEntryAllowed
FROM FormCollectionSchedule fcs

我的结束查询会更复杂,但我想确认这个AliasToBean方法是否可以返回映射的域对象以及通过sql检索的表中的基本字段值。

查询执行如下所示:

var result = session.CreateQuery(hqlQuery.ToString())
                .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof (VisitFormCollectionResult)))
                .List<VisitFormCollectionResult>();

注意:VisitFormCollectionResult DTO有更多属性,但我想知道是否可以填充与名称匹配的域对象属性

更新发现了我的问题!我必须明确别名每个字段。一旦我添加了一个别名,即使该类的成员属性与我的DTO的属性名称匹配,该对象的水合作用也能正常工作。

1 个答案:

答案 0 :(得分:1)

我自己的问题的答案是,select中的每个单独字段都需要一个与属性匹配的显式别名,无论字段名称是否已经与DTO对象的属性名称匹配:

SELECT 
fcs.MeasurementPoint as "MeasurementPoint", 
fcs.Form as "Form", 
fcs.MeasurementPoint.IsUnscheduled as "IsVisitUnscheduled", 
fcs.MultipleEntryAllowed as "MultipleEntryAllowed"
FROM FormCollectionSchedule fcs