索引所有派生的 classes of base class ravendb

Index all derived classes of base class ravendb

我们的项目有一个框架和一个自己的代码库,它实现了框架的实体。

这个想法也是在框架中有几个索引,这些索引将 return 某些框架类型(如用户)的所有继承结果。

显然,Raven 支持这一点的唯一方法(无需在最高级别创建索引并手动添加映射)是通过覆盖 Clr 类型将所有对象存储在同一集合中。但是,这意味着我们丢失了派生信息并且无法对其进行查询。

一些示例:

class A { 
    public string Id {get; set; }, 
    public string Name {get; set; } 
}
class B : A { }
class C : A { }
class D : C { } 

然后我想查询以下内容:

store.Query<IndexOfA>().Where(a => a.Name == "foo").As<A>().ToList();

并且仍然能够这样做;

store.Query<IndexOfC>().As<C>().ToList()

我的想法是添加一个约定,在 RavenDB 中存储文档时将派生和基 class 保存到元数据,但我不知道如何去做,也找不到任何文档主题。

有什么想法吗?

您可以通过 AddMapForAll<Base> 创建一个使用多映射索引的索引,这将为每个派生的 class 生成一个单独的条目。 然后您可以使用该索引进行多态查询。