Les 5: Entity Framework - Relaties

Python intro
Programming basics-II
Les 3 / Week 7a
Entity Framework: Relaties
CSD-V
Les 5
1 / 35
volgende
Slide 1: Tekstslide
Applicatie- en mediaontwikkelaarMBOStudiejaar 1

In deze les zitten 35 slides, met interactieve quizzen en tekstslides.

Onderdelen in deze les

Python intro
Programming basics-II
Les 3 / Week 7a
Entity Framework: Relaties
CSD-V
Les 5

Slide 1 - Tekstslide

Deze slide heeft geen instructies

Deze les
📚 Theorie:
  • Relaties tussen Entiteiten
  • Soorten relaties
  • Relaties in EF (Entity Framework)

👩‍💻 Praktisch: 
Relaties in ChatMeister toepassen

Slide 2 - Tekstslide

Deze slide heeft geen instructies

Wat je al weet over:
"Relaties tussen Entiteiten"

Slide 3 - Woordweb

Deze slide heeft geen instructies

Entiteiten worden met elkaar verbonden door associaties.

Entiteiten:
  • Chat
  • Message
  • User



  • Een Chat heeft meerdere berichten
  • Een Message hoort bij een Chat
  • Een Message hoort bij een verzender (User)

Slide 4 - Tekstslide

Deze slide heeft geen instructies

Entity-Relationship Diagram (ERD)
Een ERD visualiseert relaties tussen entiteiten, eigenschappen en hun structuur.

Slide 5 - Tekstslide

Deze slide heeft geen instructies

Entity-Relationship Diagram (ERD)
Entiteiten

Slide 6 - Tekstslide

Deze slide heeft geen instructies

Entity-Relationship Diagram (ERD)
Relaties

Slide 7 - Tekstslide

Deze slide heeft geen instructies

Soorten Relaties in ERD

Slide 8 - Tekstslide

Deze slide heeft geen instructies

Herken de relatie van de entiteit 'Student' naar de entiteit 'Lokaal':

Studenten en het lokaal waar ze nu in zitten
A
to-one
B
to-many

Slide 9 - Quizvraag

Deze slide heeft geen instructies

Herken de relatie van de entiteit 'Lokaal' naar de entiteit 'Student':

Lokalen en de studenten die in die lokalen zitten
A
to-one
B
to-many

Slide 10 - Quizvraag

Deze slide heeft geen instructies

Herken de relatie tussen de entiteiten 'Auteur' en 'Boek':

De door auteurs geschreven boeken
A
One-to-one
B
One-to-many
C
Many-to-many

Slide 11 - Quizvraag

Deze slide heeft geen instructies

Herken de relatie tussen de entiteiten 'Persoon' en 'Paspoort':

Een persoon en diens paspoort
A
One-to-one
B
One-to-many
C
Many-to-many

Slide 12 - Quizvraag

Verlopen paspoorten, dubbele nationaliteit etc
Herken de relatie van 'Acteur' entiteiten met 'Film' entiteiten:

Acteurs en films waar ze in spelen
A
One-to-one
B
One-to-many
C
Many-to-many

Slide 13 - Quizvraag

Deze slide heeft geen instructies

Bij een many-to-many bestaat altijd een koppeltabel
Personen die Pokémon kaarten verzamelen:
Een Pokémon kaart kan holografisch (glimmend) zijn, er zijn veel Pokémon kaarten van verschillende Pokémon.
Een Persoon kan meerdere kaarten hebben, ook van dezelfde Pokémon. Maar de kaarten van de ene Persoon zijn beter bewaard dan die van een ander. 
De Kwaliteit van de kaart van een persoon kan dus verschillen (bijv.: slechte staat of juist ‘mint’)

Slide 14 - Tekstslide

Deze slide heeft geen instructies

Entity-Relationship Diagram (ERD)
Naast dat jullie bij de PRO lessen meer leren over het ERD, krijg je daar ook uitleg over Normaliseren.

Slide 15 - Tekstslide

Deze slide heeft geen instructies

Relaties vastleggen in EF
(EF = Entity Framework)

Slide 16 - Tekstslide

Deze slide heeft geen instructies

Wat weet je al over:
Relaties in 📉 Databases?

En wat weet je al over:
🔑 Primary Keys en 🌍 Foreign Keys?

Deel zoveel mogelijk van je kennis.

Slide 17 - Woordweb

Deze slide heeft geen instructies

Relaties vastleggen in Entity Framework (EF)
Onze modellen bij de ChatMeister Inleveropdracht

Slide 18 - Tekstslide

Deze slide heeft geen instructies

Relaties vastleggen in EF
Met Navigation Properties verwijzen we in EF
makkelijk naar de gerelateerde objecten

Slide 19 - Tekstslide

Deze slide heeft geen instructies

Relaties vastleggen in EF
Met Navigation Properties verwijzen we
naar de gerelateerde objecten

Slide 20 - Tekstslide

Deze slide heeft geen instructies

Relaties vastleggen in EF
Met Navigation Properties verwijzen we
naar de gerelateerde objecten

Slide 21 - Tekstslide

Deze slide heeft geen instructies

Relaties ophalen in EF
Als we EF nu vragen om alle Chats op te halen inclusief de Messages die bij iedere Chat horen, weet EF de Query zo op de achtergrond op te bouwen:
SELECT * FROM Chat
JOIN Message ON Message.ChatId = Chat.Id

Slide 22 - Tekstslide

Deze slide heeft geen instructies

Relaties ophalen in EF
Let op: alleen de relaties vastleggen, wil niet zeggen
dat de gegevens ook automatisch worden opgehaald.

Niet opgehaald in deze DbContext = geen resultaten:






.Messages is hier 'null' omdat ze niet geladen zijn met:

Slide 23 - Tekstslide

Na deze slide mogelijk een rustmoment van 5 minuten inbouwen.
Hoe weet EF welke entiteiten bij elkaar horen?
"Geef me van het bericht in 'message' de bijbehorende Chat, en dan daarvan de Name":

message.Chat.Name
Entity Framework...
  1. bekijkt welke ChatId dit bericht heeft
  2. zoekt in de AppDbContext de Chat waarvan de PK overeenkomt met dat ChatId
  3. geeft dan van die Chat de waarde die in 'Name' staat
1
2
3

Slide 24 - Tekstslide

Deze slide heeft geen instructies

Entity Framework vertrouwt op conventies
Bij het zoeken naar de Primary Key (PK) van een model kijkt EF naar eigenschappen met de naam: Id of <klasse naam>Id

Dit is dus beide prima voor EF:




Hier op school houden we de conventie 'Id' aan voor de PK.

Slide 25 - Tekstslide

Deze slide heeft geen instructies

Entity Framework vertrouwt op conventies
Voor de Foreign Key (FK) zoekt Entity Framework naar overeenkomende eigenschappen in gerelateerde entiteiten, aan de hand van een van deze naamgevingsconventies:

  • <navigatie-eigenschapsnaam><PK-eigenschapsnaam>
  • <navigatie-eigenschapsnaam>Id
  • <primaire entiteitstype-naam><PK-eigenschapsnaam>
  • <primaire entiteitstype-naam>Id

Hier op school houden we de conventie 
'<primaire entiteitstype-naam>Id' aan voor de FK.

Slide 26 - Tekstslide

Deze slide heeft geen instructies

Entity Framework vertrouwt op conventies
Voor de Foreign Key (FK) zoekt Entity Framework naar overeenkomende eigenschappen in gerelateerde entiteiten, aan de hand van een van deze naamgevingsconventies:

  • <navigatie-eigenschapsnaam><PK-eigenschapsnaam>
  • <navigatie-eigenschapsnaam>Id
  • <primaire entiteitstype-naam><PK-eigenschapsnaam>
  • <primaire entiteitstype-naam>Id

Hier op school houden we de conventie 
'<primaire entiteitstype-naam>Id' aan voor de FK.
primaire entiteitstype
←FK
←FK

Slide 27 - Tekstslide

Deze slide heeft geen instructies

Fout voorbeeld
Entity Framework kan niet weten in 
welke eigenschap de PK van de 
bijbehorende Chat of User staat...



... vanwege verkeerde namen, die niet
aan de conventies voldoen.

Slide 28 - Tekstslide

Deze slide heeft geen instructies

Entity Framework vertrouwt op conventies
Voor de Foreign Key (FK) zoekt Entity Framework naar overeenkomende eigenschappen in gerelateerde entiteiten, aan de hand van een van deze naamgevingsconventies:

  • <navigatie-eigenschapsnaam><PK-eigenschapsnaam>
  • <navigatie-eigenschapsnaam>Id
  • <primaire entiteitstype-naam><PK-eigenschapsnaam>
  • <primaire entiteitstype-naam>Id

Hier op school houden we de conventie 
'<primaire entiteitstype-naam>Id' aan voor de FK.
primaire entiteitstype

Slide 29 - Tekstslide

Deze slide heeft geen instructies

Beantwoord beide vragen:
Waar staat PK voor?
Waar gebruiken we een PK voor?

Slide 30 - Open vraag

Deze slide heeft geen instructies

Beantwoord beide vragen:
Waar staat FK voor?
Waar gebruiken we FK's voor?

Slide 31 - Open vraag

Deze slide heeft geen instructies

Wat is, hier op school, de juiste naam voor de PK eigenschap van een 'Film' model?
A
FilmId
B
Id
C
ID
D
FilmID

Slide 32 - Quizvraag

Deze slide heeft geen instructies

Hoe noemen we, hier op school, in het 'Game' model de Foreign Key eigenschap die verwijst naar het bijbehorende 'Genre' model?
A
Genre
B
FilmGenre
C
GenreId
D
FilmId

Slide 33 - Quizvraag

Deze slide heeft geen instructies

Opdracht: ChatMeister verbeteren
📚 Lees in hoofdstuk van het moduleboek 4 de paragrafen t/m 4.5.
👩‍💻 Voeg in jouw ChatMeister project de Navigation Properties toe uit paragraaf 4.5.
👩‍💻 Zorg dat bij het laden van chats, ook de Messages worden geladen d.m.v. Eager Loading. Zie daarvoor ook paragraaf 4.5.

📚 Lees paragraaf 4.6 en 4.7.
👩‍💻 Verander jouw code zodat de berichten pas geladen worden bij het openen van een individuele chat (Explicit Loading).
Extra challenge: Laat bij iedere Message ook de naam zien van de User die het bericht geplaatst heeft. Je moet hiervoor Explicit Loading gebruiken om de Users op te halen, die bij ieder bericht horen, die bij iedere Chat horen. Hint: zoekopdracht "ef explicit load collection child"
👧 Werk zelfstandig
🎧 Muziek mag (headset)
👓 Lees de paragrafen goed
🕐 20 á 30 minuten

Slide 34 - Tekstslide

Extra challenge link: https://stackoverflow.com/a/5967238

context.Entry(chat)
       .Collection(c => c.Messages)
       .Query()
       .Include(m => m.User)
       .Load();
Volgende les
Voorafgaand aan de les: 
  • Maak Opdracht 4.8: DevCitySim (deel 2) in het moduleboek.
  • Vragen? Zoek ze uit of schrijf ze op als je er geen antwoord op kan vinden. We behandelen die vragen in de les.

In de volgende les:
  • Herhaling: Relaties in EF
  • Many-to-many relaties in EF
  • Tijd om te werken aan de weekcheck opdracht

Slide 35 - Tekstslide

Deze slide heeft geen instructies