2013-02-14 70 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)