我发现使用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的属性名称匹配,该对象的水合作用也能正常工作。
答案 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