在 RavenDB 中指定集合名称

Posted

技术标签:

【中文标题】在 RavenDB 中指定集合名称【英文标题】:Specifying Collection Name in RavenDB 【发布时间】:2011-08-06 21:49:32 【问题描述】:

假设我有 3 个对象水果、苹果和橙子。 Fruit 是 Apple 和 Orange 的抽象基类。当我使用 session.Store(myApple) 时,它会将其放入 Apples 集合中。 myOrange 存储在 Oranges 集合中。说得通。

我可以告诉 Raven 我想要一个可以装苹果或橙子的水果系列吗? Mongodb 允许这样做,因为它允许我明确指定集合名称。 RavenDB 集合文档说:

预期的使用模式是集合用于分组 具有类似结构的文档,尽管这不是必需的。从 从数据库的角度来看,集合只是一组文档 共享相同的实体名称。

我希望它类似于:session.Store(myApple) 或 session.Store("Fruits", myApple)

有什么想法吗?谢谢。

【问题讨论】:

这些似乎与您的问题相似。我会尝试这个,但我目前无法。 groups.google.com/group/ravendb/browse_thread/thread/…mikehadlow.blogspot.com/2010/10/… 【参考方案1】:

锥子, 你可以这样做:

session.Store(apple);
session.Advanced.GetMetadataFor(apple)[Constants.RavenEntityName] = "Fruits";

这是很长的路要走。 一个更好的方法是全局添加这个逻辑,它看起来像这样:

store.Conventions.FindTypeTagName = 
   type => type.IsSubclassOf(typeof(Fruit)) ? 
       DocumentConvention.DefaultTypeTagName(typeof(Fruit)) : 
       DocumentConvention.DefaultTypeTagName(type);

这将处理一切。

【讨论】:

对于.NET Core,您需要使用type.GetTypeInfo().IsSubclassOf(typeof(Fruit))(来自System.Reflection)或typeof(Fruit).IsAssignableFrom(type)(link)。请记住IsAssignableFrom (link) 的一些陷阱 为了更好地理解这个答案,请看这里ravendb.net/docs/article-page/3.5/all/client-api/session/…

以上是关于在 RavenDB 中指定集合名称的主要内容,如果未能解决你的问题,请参考以下文章

RavenDB 使用 Raven.Smuggler 在 RavenDB 服务器之间导出/导入数据

RavenDB Query<T> 总是比 Load<T> 快

Ravendb 工作室认证

RavenDb:在单元测试时强制索引等到不陈旧

RavenDB系列教程

RavenDB 全文搜索