Les 5: Entity Framework - Relaties

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

Cette leçon contient 35 diapositives, avec quiz interactifs et diapositives de texte.

Éléments de cette leçon

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

Slide 1 - Diapositive

Cet élément n'a pas d'instructions

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

👩‍💻 Praktisch: 
Relaties in ChatMeister toepassen

Slide 2 - Diapositive

Cet élément n'a pas d'instructions

Wat je al weet over:
"Relaties tussen Entiteiten"

Slide 3 - Carte mentale

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 5 - Diapositive

Cet élément n'a pas d'instructions

Entity-Relationship Diagram (ERD)
Entiteiten

Slide 6 - Diapositive

Cet élément n'a pas d'instructions

Entity-Relationship Diagram (ERD)
Relaties

Slide 7 - Diapositive

Cet élément n'a pas d'instructions

Soorten Relaties in ERD

Slide 8 - Diapositive

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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 - Quiz

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 - Quiz

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

Relaties vastleggen in EF
(EF = Entity Framework)

Slide 16 - Diapositive

Cet élément n'a pas d'instructions

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 - Carte mentale

Cet élément n'a pas d'instructions

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

Slide 18 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 19 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 20 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 21 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 30 - Question ouverte

Cet élément n'a pas d'instructions

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

Slide 31 - Question ouverte

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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 - Diapositive

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 - Diapositive

Cet élément n'a pas d'instructions