索引基类ravendb的所有派生类

时间:2016-06-08 15:21:02

标签: c# ravendb

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

这个想法也是在框架中有几个索引,它们将返回某些框架类型(如user)的所有继承的结果。

显然,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中存储文档时添加一个将派生类和基类保存到元数据的约定,但我不知道如何解决这个问题,也无法找到有关该主题的任何文档。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个使用带有AddMapForAll<Base>的多地图索引的索引,它将为每个派生类生成一个单独的条目。 然后,您可以使用该索引进行多态查询。