在 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
有什么想法吗?谢谢。
【问题讨论】:
这些似乎与您的问题相似。我会尝试这个,但我目前无法。 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 服务器之间导出/导入数据