2011-08-06 7 views
29

Digamos que tengo 3 objetos de fruta, manzana y naranja. Fruit es la clase base abstracta para Apple y Orange. Cuando uso session.Store (myApple), lo coloca en la colección Apples. Tiendas myOrange en la colección Oranges. Tiene sentido.Especificación del nombre de la colección en RavenDB

¿Puedo decirle a Raven que quiero una colección de frutas que pueda contener manzanas o naranjas? Mongodb lo permite ya que me permite especificar explícitamente el nombre de la colección. La documentación de colecciones RavenDB dice:

el patrón de uso esperado es que las colecciones se utilizan para agrupar documentos con estructura similar, aunque esto no se requiere. Desde el punto de vista de la base de datos, una colección es solo un grupo de documentos que comparten el mismo nombre de entidad.

me esperaba que fuera algo así como: session.Store < Frutas> (myApple), o session.Store ("Frutas", myApple)

¿Alguna idea? Gracias.

+0

Parecen similares a su problema. Intentaré esto, pero no puedo por el momento. 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- inheritance-and.html –

Respuesta

39

lezna, Puede hacerlo utilizando:

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

que es el camino más largo para hacerlo. Una manera mucho mejor sería añadir esta lógica a nivel mundial, se ve algo como esto:

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

que se encargará de esto para todo.

+0

Sí, eso funcionó para mí, ¡gracias! – awl

+0

Gracias por su respuesta. –

+0

Para .NET Core necesita usar 'type.GetTypeInfo(). IsSubclassOf (typeof (Fruit))' (de 'System.Reflection') o' typeof (Fruit) .IsAssignableFrom (type) '([link] (http : //msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx)). Tenga en cuenta algunos errores para 'IsAssignableFrom' ([link] (https://stackoverflow.com/a/2742288/968003)) –

Cuestiones relacionadas