鉴于我具有以下结构(删除了不必要的详细信息)
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,
};
}
}
RavenDB使用一个命名约定。如果您没有正确命名字段,那么它将不知道如何映射事物。
在这种情况下,您使用的第二个索引具有Id属性,但是RavenDB无法知道您映射了制造商的ID,而不是根ID。
这就是为什么我们有这个约定。如果确实需要,可以更改它,但是通常不建议这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句