我有两个文件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>();
}
答案 0 :(得分:0)
发生这种情况是因为您使用的是整数ID。在转换中调用database.Load
时,您需要手动将其转换为字符串ID。
database.Load<MenuItem>("MenuItems/" + m.ID)
如果你使用整数或guid ID,这是Raven混淆的几个地方之一。如果您使用字符串ID,则不会出现此问题。
此外,您可以考虑使用results transformer代替。它们比索引变换器更容易,索引变换器现在已经过时了。