Entity Framework i podejście code-first w ASP.NET MVC – relacje


11 kwietnia 2017 / Michał Kortas


Prawie zapomniałem o napisaniu kontynuacji wpisu z zeszłego tygodnia, ale na szczęście temat, który chcę dzisiaj poruszyć nie jest zbyt skomplikowany. Chodzi o relacje między tabelami oraz ich odwzorowanie w kodzie – bo omawiamy przecież podejście code-first. Omówię dzisiaj trzy istniejące typy relacji: jeden do jednego, jeden do wielu oraz wiele do wielu. Zaczynajmy!

Zakładam oczywiście, że wiesz jak skonfigurować sobie Entity Framework i potrawisz uruchomić migrację aktualizującą bazę danych. Jeśli nie, zachęcam Cię do uprzedniego zapoznania się z moim artykułem:

Entity Framework i podejście code-first w ASP.NET MVC
– pierwsze kroki

Relacja jeden-do-jednego

Zakładam, że baza posiadać ma dwie tabele: Osoby i Adresy.

Relacja jeden do jednego nie jest raczej zbyt często spotykana. Tak czy inaczej warto się z nią zapoznać. Wyobraź sobie, że istnieją na świecie adresy, do których może być przypisana tylko jedna osoba, a każda z tych osób może posiadać przypisany tylko jeden adres. No więc?

Na start otwarcie bramek do klas, by widziały się wzajemnie (bramki – może mało profesjonalne, ale działa na wyobraźnię – otwieram sobie dostęp).

Jak wymusić teraz w tabeli Adresy powiązanie 1-1 do tabeli Osoby? Dodać klucz obcy Osoby do klucza głównego Adresy.

Sprawdzę teraz, co nam to dało. Szybki update bazy danych, wygenerowanie kodu SQL definicji bazy i oto efekt:

Relacja jeden-do-wielu

Co jeśli jedna osoba posiada dwa adresy? A jeśli jeszcze więcej adresów?

Wystarczy mała modyfikacja klucza obcego (FK jako nowe pole) w tabeli Adresy, oraz zamiana bramki z jednorazową wartością na kolekcję wartości w tabeli Osoby.

Zmiana nazw tabel

Jak pewnie zauważyłeś, tabele otrzymują automatycznie wygenerowane nazwy. Możesz jednak przypisać im wybrane przez siebie nazewnictwo. Szerzej o adnotacjach będę pisał w kolejnym z tej serii artykule na blogu.

Generowanie definicji SQL

Po aktualizacji bazy, definicja SQL tabeli Adresy jest następująca:

Relacja wiele-do-wielu

Usuwamy klucze obce, a bramki w obu tabelach otwieramy na kolekcje zamiast wartości pojedynczych. O resztę zadba EntityFramework.

Jeśli odświeżysz eksplorator bazy danych, to zobaczysz automatycznie wygenerowaną tabelę mieszającą.

Automatycznie wygenerowana tabela haszująca

Automatycznie wygenerowana tabela mieszająca

Jej definicja jest następująca:

Pola tabeli haszującej

Pola tabeli mieszającej

Podsumowanie

Tyle na dzisiaj. Za tydzień we wtorek kolejny wpis z serii EntityFramework i podejście Code-First.

Poprzedni wpis z serii: Entity Framework i podejście code-first w ASP.NET MVC – pierwsze kroki


Tagi:


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.