2010-04-15 14 views
5

Zeszłego lata zadałem pytanie dotyczące how to add new object to an IList mapped as a one-to-many with NHibernate. Jedną z odpowiedzi niech mnie do tego ustępu w documentation:Dwukierunkowe jedno do wielu skojarzeń z indeksowanymi kolekcjami w NHibernate

Należy pamiętać, że NHibernate nie obsługuje dwukierunkowe jeden-do-wielu skojarzeń z kolekcji indeksowanej (listy, mapy lub array) jako „wiele” koniec , musisz użyć mapowania zestawu lub worka.

Choć jestem pewien, że rozumiesz co ustęp ten mówi, nie mam pojęcia dlaczegolub jak aby obejść to ograniczenie. Jak ja teraz znowu pracować z modelem, który wydaje się wymagać „dwukierunkowy stowarzyszenie jeden-do-wielu z kolekcji indeksu”, pomyślałem, czas był odpowiedni dla dalszych pytań:

  1. Dlaczego NHibernate mieć to ograniczenie na skojarzeniach? Mam wrażenie, że faceci leżący za NHibernate są całkiem sprytni, więc zakładam, że istnieje całkiem niezły powód.

  2. Jakie są typowe obejścia tego problemu? Tworzenie kolekcji nieindeksowanej torby i dodanie do klasy potomnej jawnej właściwości Position? Jakieś lepsze rozwiązania?

Odpowiedz

5

ten został poproszony 4 miesiące temu, więc nie wiem, czy nadal jesteś zainteresowany :-)

koncepcyjne powodem nie wspiera dwukierunkowe indeksowanych stowarzyszenia jest prosta: wskaźnik ma sens tylko w jednym kierunku.

Weźmy na przykład klasę Invoice z właściwością Lines typu IList<Line>.

Ustawienie line.Invoice = anInvoice nie ma sensu, ponieważ nie można ustalić, jaki powinien być indeks listy.

Należy pamiętać, że NHibernate „widzi” dwukierunkowych relacji jak dwóch różnych związków (stąd potrzeba inverse="true" na stronie nie odpowiada za utrzymywanie go)

Rozwiązaniem jest dokładnie to, co sugeruje: Pozycja/Index/etc Właściwość w klasie potomnej.

Powiązane problemy