流利的hibernate Transformers.AliasToBean没有按预期工作

时间:2013-02-14 03:32:36

标签: fluent-nhibernate queryover

我有三张桌子。一个是主表:TableA。 TableA引用一个表名为ReferencedTable,最后引用ReferencedTable引用的查找表。

我有这个查询返回十个最近的对象:

TableADTO TableAlias = null;
LookupTableDTO LookupTableAlias = null;
ReferencedDTO ReferencedAlias = null;

dtos = session.QueryOver(() => TableAlias)
          .JoinAlias(() => TableAlias.Object, () =>ReferencedAlias)
          .JoinAlias(() => ReferencedAlias.ObjectType, () => LookupTableAlias)
          .Where(() => ReferencedAlias.PersonId == user.Id &&
                       (LookupTableAlias.Id != INVOICE_ID ||
                        LookupTableAlias.Id != FINANCIAL_ID) &&
                       TableAlias.Status == NEW_STATUS_FLAG &&
                       ReferencedAlias.ReceivedDate < DateTime.Now)
          .Take(10)
          .List()
          .Select(dto=>
          new AbreviatedDTO
          {
              Id = dto.Referenced.Id,
              Field1 = dto.Field1,
              Priority = dto.Referenced.Priority,
              ReceivedDate = dto.Referenced.ReceivedDate,
              Field1 = dto.Referenced.Field1,
              Type = dto.Referenced.Lookup.TypeCode,
              Status = dto.Status
          }).ToList();    

这可以按预期工作。但是,我认为下面的转换也会起作用。它确实带来了10个对象,但对象具有所有默认值并且未填充(例如AbreviatedDTO.ReceivedDate = DateTime.Minimum)。我是否在使用QueryOver做错了什么?

任何帮助将不胜感激。 比尔N

TableDTO TableAlias = null;
LookupTableDTO LookupTableAlias = null;
ReferencedDTO ReferencedAlias = null;

dtos = session.QueryOver(() => TableAlias)
          .JoinAlias(() => TableAlias.Object, () =>ReferencedAlias)
          .JoinAlias(() => ReferencedAlias.ObjectType, () => LookupTableAlias)
          .Where(() => ReferencedAlias.PersonId == user.Id &&
                       (LookupTableAlias.Id != INVOICE_ID ||
                        LookupTableAlias.Id != FINANCIAL_ID) &&
                       TableAlias.Status == NEW_STATUS_FLAG &&
                       ReferencedAlias.ReceivedDate < DateTime.Now)
 .SelectList(list => list
                        .Select(x => TableAlias.Field1)
                        .Select(x => ReferencedAlias.Id)
                        .Select(x => ReferencedAlias.Field1)
                        .Select(x => ReferencedAlias.ReceivedDate)
                        .Select(x => ReferencedAlias.Priority)
                        .Select(x => LookupTableAlias.TypeCode))
.TransformUsing(Transformers.AliasToBean<AbreviatedDTO>())
          .Take(10)
  .List<AbreviatedDTO>()

1 个答案:

答案 0 :(得分:0)

您需要为每个选定的字段定义一个别名,与结果dto中的属性名称相同

AbreviatedDTO alias = null;

// in query
    .SelectList(list => list
        .Select(() => TableAlias.Field1).WithAlias(() => alias.Field1)