2016-06-08 63 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)在官方文檔解釋如何幫助。 –