2011-05-26 19 views
6

Ostatnio grałem z RavenDB i jest coś, co mnie trochę irytuje.Odwołanie do obiektu wartości obiektu nadrzędnego w RavenDb

Mam obiekt encji z szeregiem obiektów wartości, np.

class Foo 
{ 
    IList<Bar> Bars { get; set; } 
} 

Istnieje wiele razy, kiedy chcę przekazać obiekt typu Bar do metody/klasy, ale w pewnym momencie chcą odwołać z powrotem do jednostki nadrzędnej. W świecie NHibernate jest to naprawdę łatwe, jeśli skonfiguruję je z relacją 1 .. *, np.

class Bar 
{ 
    Foo Foo { get; set; } 
} 

Jednak RavenDb naprawdę nie tak, co powoduje mi konieczności tworzenia metod takich jak:

void DoSomething(Foo foo, Bar bar) 
{ 
    Console.WriteLine(foo); 
    Console.WriteLine(bar); 
} 

zamiast

void DoSomething(Bar bar) 
{ 
    Console.WriteLine(bar.Foo); 
    Console.WriteLine(bar); 
} 

Czy istnieje jakiś sposób, aby to osiągnąć z RavenDb ?

Zdaję sobie sprawę, że RavenDb (i ogólnie bazy danych) promuje inny sposób myślenia o kontaktach z podmiotami, jeśli jest to tylko przypadek, gdy spędzam zbyt długo w świecie relacyjnym/znormalizowanym, każdy może wyjaśnić, w jaki sposób powinienem być strukturyzacji mojego kodu w sposób bardziej db dokumentu?

+1

Być może łatwiej byłoby, gdyby można opisać w skrócie, co starasz się zrobić . Zrozumienie twojego BL może pomóc nam stworzyć strukturę encji bardziej odpowiednią dla RavenDB – synhershko

Odpowiedz

8

Można oczywiście zrobić:

class Bar 
{ 
    Foo Foo { get; set; } 
} 

Musisz tylko upewnić się, że ustawienie:

documentStore.Conventions.CustomizeJsonSerializer = 
     serializer => serializer.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; 
Powiązane problemy