1

我正在使用 RavenDB,并且正在尝试做一些事情。我有一个基本类型 Principal,它派生了两个类:User 和 ApplicationInstance。在我的应用程序中,必须经常创建和存储 User 和 ApplicationInstance 的实例。但问题是,我还需要能够一次查询存储在数据库中的所有 Principal 对象,确定给定的 Principal 是 User 还是 ApplicationInstance,然后查询整个 User 或 ApplicationInstance 对象。

我怎样才能做到这一点?

4

2 回答 2

2

您可以定义一个多地图索引,用作源UserApplicationInstance集合。

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

如果您使用 Raven Studio 定义索引,只需单击Add Map按钮,您将获得一个新的文本区域,允许您定义额外的 Map。

但是请注意,两个映射的输出结构必须具有相同的属性(几乎就像您在 SQL 中使用 UNION 所做的那样)。

于 2013-08-14T20:35:43.767 回答
1

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

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

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

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

于 2013-08-14T20:35:43.597 回答