为什么我需要使用下划线命名索引中的属性?

时间:2014-10-13 08:09:44

标签: indexing ravendb

鉴于我有以下结构(删除了不必要的细节)

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,
                          };
    }
}

1 个答案:

答案 0 :(得分:1)

RavenDB使用了一种命名约定。如果你没有正确地命名你的字段,它就不知道如何映射事物。

在这种情况下,您使用的第二个索引具有Id属性,但RavenDB无法知道您映射了制造商的ID,而不是根ID。

这就是为什么我们有这个惯例。您可以根据需要进行更改,但通常不建议这样做。