Ravendb TransformResults显示使用Load()填充的属性的空值

时间:2014-01-29 12:14:38

标签: ravendb

我有两个文件Ticket和MenuItem我用TransformResults创建了索引,但问题是我在转换中为Loaded文件获取空值

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获取null,但对于所有其他字段,我得到正确的值

这是查询

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

            }

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为您使用的是整数ID。在转换中调用database.Load时,您需要手动将其转换为字符串ID。

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

如果你使用整数或guid ID,这是Raven混淆的几个地方之一。如果您使用字符串ID,则不会出现此问题。

此外,您可以考虑使用results transformer代替。它们比索引变换器更容易,索引变换器现在已经过时了。