2013-02-14 35 views
0

我有三个表。一个是主表:TableA。一个表由TableA引用,称为ReferencedTable,最后是ReferencedTable引用的查找表。流利的休眠变压器.AliasToBean没有按预期工作

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

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上做错了什么?

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

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>() 

回答

0

你需要定义一个别名为每个选定的领域一样,在产生的PROPERTYNAME DTO

AbreviatedDTO alias = null; 

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