【问题标题】:AliasToBean DTO with known type具有已知类型的 AliasToBean DTO
【发布时间】:2014-06-17 22:55:15
【问题描述】:

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

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

在类“namespace.DtoClass”中找不到属性“0”的设置器

我的选择在我的映射类上如下所示(我已确认映射正确提取):

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 的属性名称匹配,对象的水合也能正常工作。

【问题讨论】:

  • 你能发布一些代码吗? DTO、Nhibernate 查询等。

标签: nhibernate


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多