Les 5: Entity Framework - Relaties

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

This lesson contains 35 slides, with interactive quizzes and text slides.

Items in this lesson

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

Slide 1 - Slide

This item has no instructions

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

👩‍💻 Praktisch: 
Relaties in ChatMeister toepassen

Slide 2 - Slide

This item has no instructions

Wat je al weet over:
"Relaties tussen Entiteiten"

Slide 3 - Mind map

This item has no 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 - Slide

This item has no instructions

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

Slide 5 - Slide

This item has no instructions

Entity-Relationship Diagram (ERD)
Entiteiten

Slide 6 - Slide

This item has no instructions

Entity-Relationship Diagram (ERD)
Relaties

Slide 7 - Slide

This item has no instructions

Soorten Relaties in ERD

Slide 8 - Slide

This item has no 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

This item has no 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

This item has no 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

This item has no 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

This item has no 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 - Slide

This item has no 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 - Slide

This item has no instructions

Relaties vastleggen in EF
(EF = Entity Framework)

Slide 16 - Slide

This item has no 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 - Mind map

This item has no instructions

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

Slide 18 - Slide

This item has no instructions

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

Slide 19 - Slide

This item has no instructions

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

Slide 20 - Slide

This item has no instructions

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

Slide 21 - Slide

This item has no 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 - Slide

This item has no 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 - Slide

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

This item has no 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 - Slide

This item has no 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 - Slide

This item has no 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 - Slide

This item has no 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 - Slide

This item has no 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 - Slide

This item has no instructions

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

Slide 30 - Open question

This item has no instructions

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

Slide 31 - Open question

This item has no 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

This item has no 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

This item has no 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 - Slide

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

This item has no instructions