2014-01-29 19 views
0

我有機票和菜單項我已經創建的索引與TransformResults但問題是,我得到了加載的文檔空值兩個文件空值在變換Ravendb TransformResults顯示爲()填充了負載特性

public class Ticket 
    { 
     public int ID { get; set; } 
     public int ItemId { get; set; } 
     public string ItemName { get; set; } 
     public int Price { get; set; } 
    } 
    public class MenuItem 
    { 
     public int ID { get; set; } 
     public string ItemName { get; set; } 
     public string PriceCategory { get; set; } 

    } 

我有創建索引像

public class TicketItemGross : AbstractIndexCreationTask<Ticket, TicketItemGross.TicketItemDetails> 
    { 
     public class TicketItemDetails 
     { 
      public string ID { get; set; } 
      public string ItemId { get; set; } 
      public string ItemName { get; set; } 
      public int Price { get; set; } 
      public string PriceCategory { get; set; } 
     } 
     public TicketItemGross() 
     { 
      Map = docs => from doc in docs 
          select new 
          { 
           ID = doc.ID, 
           ItemId=doc.ItemId, 
           ItemName=doc.ItemName, 
           Price=doc.Price 
          }; 
      TransformResults = (database, docs) => from m in docs 
                let d = database.Load<MenuItem>(m.ID) 
                select new 
                { 
                 ID = m.ID, 
                 ItemId = m.ItemId, 
                 ItemName = m.ItemName, 
                 Price = m.Price, 
                 PriceCategory=d.PriceCategory 
                }; 
     } 
    } 

和問題是,當我查詢數據。我得到空的PriceCategory但對於所有其他領域我得到正確的值

這裏查詢

IEnumerable<TicketItemGross.TicketItemDetails> list;    
      using (var session = store.OpenSession()) 
      { 
       list = session.Query<TicketItemGross.TicketItemDetails, TicketItemGross>();     

      } 

回答

0

發生這種情況,因爲你正在使用整數ID。當您在轉換中調用database.Load時,您需要手動將其轉換爲字符串ID。

database.Load<MenuItem>("MenuItems/" + m.ID) 

這幾個地方,如果你使用的整數或GUID的ID,其中烏鴉迷糊之一。如果你使用字符串標識,你不會有這個問題。

另外,您也可以考慮使用results transformer。它們比目前已經過時的指數變壓器更容易。