2011-08-06 15 views
29

Powiedzmy, że mam 3 obiekty Owoce, Jabłko i Orange. Owoce to abstrakcyjna klasa bazowa dla Apple i Orange. Kiedy używam session.Store (myApple), umieszczam go w kolekcji Apple. sklepy myOrange w kolekcji Orange. Ma sens.Określanie nazwy kolekcji w RavenDB

Czy mogę powiedzieć Raven, że chcę kolekcję owoców, która może pomieścić jabłka lub pomarańcze? Mongodb pozwala na to, ponieważ pozwala mi wyraźnie określić nazwę kolekcji. Dokumentacja zbiory RavenDB mówi:

oczekiwanego sposobu użycia jest to, że zbiory są wykorzystywane do grupy dokumenty o podobnej strukturze, choć nie jest to wymagane. Od z punktu widzenia bazy danych kolekcja to tylko grupa dokumentów , które mają tę samą nazwę jednostki.

będę oczekiwać, że będzie coś takiego: session.Store < Owoce> (myApple) lub session.Store ("owoce", myApple)

Jakieś pomysły? Dzięki.

+0

Te wydają się podobne do twojego problemu. Próbowałem tego, ale nie jestem w tej chwili w stanie. 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- dziedziczenie-and.html –

Odpowiedz

39

Szydło, Można to zrobić przy użyciu:

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

to jest długa droga, aby to zrobić. Znacznie lepszym sposobem byłoby dodać ten logika globalnie, to wygląda mniej więcej tak:

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

To zajmie to za wszystko.

+0

Tak, to działało dla mnie, dzięki! – awl

+0

Dziękuję za odpowiedź. –

+0

Dla .NET Core należy użyć 'type.GetTypeInfo(). IsSubclassOf (typeof (Fruit))' (od 'System.Reflection') lub' typeof (Fruit) .IsAssignableFrom (type) '([link] (http : //msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx)). Zapamiętaj kilka luk dla "IsAssignableFrom" ([link] (https://stackoverflow.com/a/2742288/968003)) –

Powiązane problemy