2011-08-06 27 views
29

Yani, 3 nesnem var Meyveler, Elma ve Portakal. Meyve, Apple ve Orange için soyut bir temel sınıftır. Session.Store (myApple) kullandığımda, elmaları koleksiyonuna koyar. Portakal koleksiyonundaki myOrange mağazaları. Mantıklı.RavenDB'de Koleksiyon Adının Belirlenmesi

Raven'a Elmalar veya Portakalları tutabilecek bir Meyve koleksiyonu istediğimi söyleyebilir miyim? Mongodb buna izin veriyor, çünkü koleksiyon adını açıkça belirtmeme izin veriyor. RavenDB koleksiyonları belgelerine diyor ki: O gerekli olmasa da

beklenen kullanım deseni, tahsilat grubuna benzer yapıya sahip belgeler kullanılır olmasıdır. veritabanından, bir koleksiyon, aynı varlık adını paylaşan yalnızca bir grup dokümanıdır.

Ben böyle bir şey olmasını beklersiniz: session.Store < Meyve> (myApple) veya session.Store ("Meyveler", myApple)

Herhangi bir fikir? Teşekkürler.

+0

Bunlar, sorununuza benziyor. Bunu denerdim ama şu anda yapamam. 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- Miras-and.html –

cevap

39

Awl, kullanarak bunu yapabilirsiniz: bunu yapmak için uzun bir yol olduğunu

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

. bir çok daha iyi bir yolu bu mantık tüm dünyada o şuna benzer eklemek olacaktır: her şey için bu idare edecek

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

.

+0

Evet, benim için çalıştı, teşekkürler! – awl

+0

Cevabınız için teşekkür ederiz. –

+0

.NET Core için 'type.GetTypeInfo() kullanmanız gerekir. IsSubclassOf (typeof (Fruit))' ('System.Reflection''dan) veya' typeof (Fruit) .IsAssignableFrom (type) '([link] (http : //msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx)). Bu cevabı daha iyi anlayabilmek için "IsAssignableFrom" ([bağlantı] (https://stackoverflow.com/a/2742288/968003)) –