索引所有派生的 classes of base class ravendb
Index all derived classes of base class ravendb
我们的项目有一个框架和一个自己的代码库,它实现了框架的实体。
这个想法也是在框架中有几个索引,这些索引将 return 某些框架类型(如用户)的所有继承结果。
显然,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 中存储文档时将派生和基 class 保存到元数据,但我不知道如何去做,也找不到任何文档主题。
有什么想法吗?
您可以通过 AddMapForAll<Base>
创建一个使用多映射索引的索引,这将为每个派生的 class 生成一个单独的条目。
然后您可以使用该索引进行多态查询。
我们的项目有一个框架和一个自己的代码库,它实现了框架的实体。
这个想法也是在框架中有几个索引,这些索引将 return 某些框架类型(如用户)的所有继承结果。
显然,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 中存储文档时将派生和基 class 保存到元数据,但我不知道如何去做,也找不到任何文档主题。
有什么想法吗?
您可以通过 AddMapForAll<Base>
创建一个使用多映射索引的索引,这将为每个派生的 class 生成一个单独的条目。
然后您可以使用该索引进行多态查询。