鉴于我有以下结构(删除了不必要的细节)
public class Product {
public Guid Id { get; set; }
public string Name { get; set; }
public Manufacturer Manufacturer { get; set; }
}
public class Manufacturer {
public Guid Id { get; set; }
public string Name { get; set; }
}
如果我有很多这样的产品存储在乌鸦中,我想按制造商ID(或者其他一些东西)对它们进行索引,我会制作一个这样的索引(当然在现实生活中这个索引还包含一些其他信息......)
public class ProductManufacturerIndex : AbstractIndexCreationTask<Product> {
public ProductManufacturerIndex() {
Map = products => from product in products
select new {
Manufacturer_Id = product.Manufacturer.Id,
};
}
}
我的问题是,为什么我需要命名我的字段Manufacturer_Id?如果我没有将其命名为Manufacturer_Id,则在尝试查询索引时会出现异常,因为制造商ID列未编入索引。
基本上,为什么我不能这样做? (这是我的第一个猜测)
public class ProductManufacturerIndex : AbstractIndexCreationTask<Product> {
public ProductManufacturerIndex() {
Map = products => from product in products
select new {
product.Manufacturer.Id,
};
}
}
答案 0 :(得分:1)
RavenDB使用了一种命名约定。如果你没有正确地命名你的字段,它就不知道如何映射事物。
在这种情况下,您使用的第二个索引具有Id属性,但RavenDB无法知道您映射了制造商的ID,而不是根ID。
这就是为什么我们有这个惯例。您可以根据需要进行更改,但通常不建议这样做。