RavenDB多态索引

时间:2013-08-14 19:56:55

标签: c# database ravendb

我正在使用RavenDB,我正在努力做点什么。我有一个基类型,Principal,从中派生出两个类:User和ApplicationInstance。在我的应用程序中,必须经常创建和存储User和ApplicationInstance的实例。但问题是,我还需要能够一次查询存储在数据库中的所有Principal对象,确定给定的Principal是User还是ApplicationInstance,然后查询整个User或ApplicationInstance对象。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以定义Multi Map Index用作UserApplicationInstance集合的来源。

如果使用C#代码定义索引(通过实施AbstractMultiMapIndexCreationTask<>),则必须调用AddMap两次以实现该目标(如上面的博客文章链接所示)

如果您使用Raven Studio定义索引,只需单击添加地图按钮,您将获得一个新的文本区域,允许您定义其他地图。

但请注意,两个映射的输出结构必须具有相同的属性(几乎与在SQL中使用UNION一样)。

答案 1 :(得分:1)

你想做什么?如果最终结果是查询所有Principal,然后加载整个User或AppInstance,为什么不直接查询所有用户或所有AppInstances?

Raven不会存储基类;它只会存储派生类型最多的(User或AppInstance,在您的情况下)。因此,您将拥有一组用户和一组AppInstances。

如果您确实需要同时查询两者,则可以使用Multi Map indexes。您还可以更改实体名称并将其存储在单个Principal集合中。

但是如果不知道你想要做什么,就很难推荐一个解决方案。 解释您正在尝试做什么,我们会告诉您到达目的地的正确方法。