Przeczytałem post w Internecie (nie mogę już znaleźć tego postu dla mnie), że relację wiele do wielu można zastąpić relacją jeden do wielu. Czy ktoś może podać przykład?Nhibernate: jak reprezentować wiele do wielu relacji w relacjach One-to-Many?
Odpowiedz
Po prostu podchodzę do tego pytania i zdałem sobie sprawę, że brakuje odpowiedzi. Szkoda, a ja często zwracam uwagę na tę dokumentację NHibernate: 24. Best Practices
Nie używaj mapowania skojarzeń egzotycznych.
Dobre zastosowania dla prawdziwych stowarzyszeń wielu do wielu są rzadkością. Większość z czasu potrzebujesz dodatkowych informacji przechowywanych w "tabeli linków". W tym przypadku znacznie lepiej jest użyć dwóch jedno-do-wielu powiązań z klasą pośredniego łącza. W rzeczywistości uważamy, że większość skojarzeń to jeden-do-wielu i wiele-do-jednego, powinieneś być ostrożny przy używaniu dowolnego innego stylu skojarzeniowego i zadać sobie pytanie, czy jest to naprawdę konieczne.
Spójrz na przykład pod numerem 23.2. Author/Work. Extract, uproszczona wersja wiele do wielu relacji między Author
i Work
:
<class name="Work" table="works" ...>
<id name="Id" column="id" generator="native" />
...
<set name="Authors" table="author_work" lazy="true">
<key>
<column name="work_id" not-null="true"/>
</key>
<many-to-many class="Author">
<column name="author_id" not-null="true"/>
</many-to-many>
</set>
</class>
i jego wiele-do-wielu docelowej Autor:
<class name="Author" table="authors">
...
<set name="Works" table="author_work" inverse="true" lazy="true">
<key column="author_id"/>
<many-to-many class="Work" column="work_id"/>
</set>
</class>
Tak więc, jeśli chcielibyśmy zamówić zestaw Prac na ładunek, mamy problem. W tabeli par nie ma kolumny. Ale co ważniejsze, nie ma sposobu, aby zarządzać taką kolumną.
Co możemy zrobić, jest wprowadzony przedmiot pary: AuthorWork
i rozszerzyć tabelę Pair ile potrzeba
public class AuthorWork
{
public virtual Author Author { get; set; }
public virtual Work Work { get; set; }
public virtual int OrderBy { get; set; }
}
mapowanie AuthorWork
<class name="AuthorWork" table="author_work">
...
<many-to-one name="Author" column="author_id" />
<many-to-one name="Workr" column="work_id" />
<property name="OrderBy" />
Mając to możemy przekonwertować Many to-many mapowanie na jeden do wielu, na przykład kolekcja autorów:
<set name="Authors" lazy="true"
order-by="OrderBy">
<key column="work_id" not-null="true"/>
<one-to-many class="AuthorWork" />
</set>
Możemy zarządzać jednostką AuthorWork, ustawiać kolumnę OrderBy, a tym samym efektywnie pracować z tabelą parowania.
UWAGA: należy zgodzić się z tą sugestią w dokumentacji. Im więcej wymagań się pojawia, tym bardziej cieszymy się, że mamy sposób zarządzania relacją!
Informacje o poleceniach na temat najlepszych praktyk zostały przeniesione na: http://nhibernate.info/doc/nh/en/index.html#example-mappings-authorwork – mcfea
- 1. Audit relacji wiele do wielu w NHibernate
- 2. Przykłady zapytań w relacjach wiele do wielu
- 3. wiele do wielu relacji
- 4. Laravel - Wybieranie określonych kolumn w relacjach wiele do wielu
- 5. SQLite wiele do wielu relacji?
- 6. Dapper wielu map wiele do wielu relacji
- 7. Django: Ograniczenie liczby relacji w relacji OnetoMany
- 8. Wiele do wielu relacji w Ecto
- 9. Wiele do wielu relacji do pojedynczej tabeli
- 10. wiele do wielu relacji w żagle
- 11. Wiele do wielu relacji w elasticssearch
- 12. Filtrowanie relacji wiele do wielu według relacji w Django
- 13. Renderowanie relacji wiele do wielu z dodatkowymi polami do postaci
- 14. Sortowanie w wielu relacjach Ustaw w podstawowych danych
- 15. wiele relacji jeden-do-wielu ResultSetExtractor
- 16. sfinks indeks o wiele-do-wielu relacji
- 17. ORMLite wiele do wielu relacji Android
- 18. Hibernacja: zamów wiele relacji jeden-do-wielu
- 19. Fluent NHibernate wiele do wielu mapowania Drogi
- 20. NHibernate dwukierunkowy wiele-do-wielu stowarzyszenie
- 21. Wiele do wielu relacji z ServiceStack.OrmLite
- 22. NHibernate nie utrzymuje związku wiele-do-wielu
- 23. jak mieć wiele do wielu relacji w Redis
- 24. Usuń element z oneToMany relacji
- 25. Jak reprezentować relację wiele do wielu lub wiele do jednego w MongoDB?
- 26. Wiele do wielu relacji obiekt do obiektu w C#
- 27. Django ORM sposób przeżywa wielu wiele do wielu relacji
- 28. ActiveAndroid Wielu do wielu relacji
- 29. JPA: Wiele relacji wiele do wielu między dwoma podmiotami?
- 30. Konfiguracja NHibernate dla jednokierunkowej relacji jeden-do-wielu
Proszę opisać swoje tabele i klasy, których chcesz używać. – cremor
Ponieważ relacyjne bazy DBMS zazwyczaj nie obsługują relacji wiele do wielu, relacje te są reprezentowane za pomocą tabeli łączenia i dwóch relacji jeden do wielu. Na przykład relacja wiele do wielu między 'User's i' Role 'jest wyrażana jako 'User jeden-do-wielu UserRoles wiele-do-jednego Rola'. NHibernate zwykle ukrywa to i umożliwia przezroczystą relację wiele do wielu. Jeśli chcesz, możesz zawsze bezpośrednio zamapować tabelę powiązań, np. zamapowałbyś 'User',' Role' _and_ 'UserRoles', gdzie' UserRoles' zawiera dwie relacje wiele-do-jednego (odpowiednio z "Użytkownikem" i "Role"). –
(ciąg dalszy).W tym przypadku ani 'User' ani' Role' nie będą musiały przechowywać kolekcji (jeden-do-wielu) instancji "UserRoles" (lub przynajmniej mogą być odwrotne). Może to być przydatne w celu zmniejszenia śladu pamięci, ponieważ trzeba załadować mniejszą liczbę zbiorów do pamięci. Minusem jest to, że zapytania stają się bardziej złożone. –