2016-06-08 66 views
1

我们的项目有一个框架和一个自己的代码库,它实现了框架的实体。索引所有派生类的基类ravendb

这个想法也是在框架中有几个索引将返回像用户这样的某些框架类型的所有继承的结果。

从表中可以看出,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文档时,但我不知道如何去这并不能找到任何关于这个问题的文件基类中的元数据。

任何想法?

回答

0

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

+0

感谢您的回答。这与我们正在寻找的接近,但由于我们有多个项目,我们必须创建一个扩展实际搜索派生类的所有程序集。也许有想法添加一个支持这个到Raven源码的重载方法? – Chrotenise

+0

答案是缺少[链接到一篇文章](https://ravendb.net/docs/article-page/3.5/Csharp/indexes/multi-map-indexes)在官方文档解释如何帮助。 –