2011-08-06 47 views
29

所以可以说我有3个对象水果,苹果和橘子。 Fruit是Apple和Orange的抽象基类。当我使用session.Store(myApple)时,它将它放入Apple集合中。 myOrange商店在橘子收藏。说得通。指定集合名称在RavenDB

我可以告诉乌鸦,我想一个水果集合,可容纳苹果或橙子? Mongodb允许这样做,因为它允许我明确指定集合名称。该RavenDB集合文件说:

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

我希望它是这样的:session.Store <水果>(myApple),或session.Store( “水果”,myApple)

任何想法?谢谢。

+0

这些看起来与您的问题类似。我会尝试这个,但目前我无法完成。 http://groups.google.com/group/ravendb/browse_thread/thread/eb86c2ffd29ed5e/11644a7eaddaf123?lnk=gst&q=Inheritance#11644a7eaddaf123 http://mikehadlow.blogspot.com/2010/10/ravendb-playing-with-继承 - 和.html –

回答

39

锥子, 可以使用做到这一点:

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); 

将处理这一切。

+0

是的,为我工作,谢谢! – awl

+0

感谢您的回复。 –

+0

对于.NET核心需要使用'type.GetTypeInfo()。IsSubclassOf(typeof运算(果实))'(从'System.Reflection')或'的typeof(水果).IsAssignableFrom(类型)'([链接](HTTP ://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx))。请记住一些陷阱的'IsAssignableFrom'([链接](https://stackoverflow.com/a/2742288/968003)) –