Les 5: Entity Framework - Relaties

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

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

Onderdelen in deze les

Python intro
Programming basics-II
Les 3 / Week 7a
Entity Framework: Relaties
CSD-IV
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 GameModBrowser + ShopProductApp toepassen
  • 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

Opdracht: Herken de relatie
Geef niet alleen antwoord, maar onderbouw dat antwoord ook.
Afhankelijk van je onderbouwing zijn meerdere antwoorden mogelijk.

Slide 9 - Tekstslide

Deze slide heeft geen instructies

Herken het type relatie: Studenten en het lokaal waar ze nu in zitten
A
to-one
B
to-many

Slide 10 - Quizvraag

Deze slide heeft geen instructies

Herken het type relatie: Lokalen en de studenten die in die lokalen zitten
A
to-one
B
to-many

Slide 11 - Quizvraag

Deze slide heeft geen instructies

Slide 12 - Tekstslide

Deze slide heeft geen instructies

Herken het type relatie: De door auteurs geschreven boeken (A-to-B)
A
One-to-one
B
One-to-many
C
Many-to-many

Slide 13 - Quizvraag

Deze slide heeft geen instructies

Herken het type relatie: Een persoon en diens paspoort (A-to-B)
A
One-to-one
B
One-to-many
C
Many-to-many

Slide 14 - Quizvraag

Verlopen paspoorten, dubbele nationaliteit etc
Herken het type relatie: Acteurs en films waar ze in spelen (A-to-B)
A
One-to-one
B
One-to-many
C
Many-to-many
D
Many-to-many, maar dat moet altijd via een koppeltabel

Slide 15 - Quizvraag

Deze slide heeft geen instructies

one-to-many
many-to-many
many-to-many heeft altijd een 'koppeltabel'

Slide 16 - Tekstslide

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 17 - 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 18 - Tekstslide

Deze slide heeft geen instructies

Relaties vastleggen in EF
(EF = Entity Framework)

Slide 19 - 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 20 - Woordweb

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property
  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property

Slide 21 - Tekstslide

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property



  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property

Slide 22 - Tekstslide

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property
  2. Navigation Property




  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property

Slide 23 - Tekstslide

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property
  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)




  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property

Slide 24 - Tekstslide

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property
  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)




  5. Toon de data via de Navigation Property

Slide 25 - Tekstslide

Deze slide heeft geen instructies

Relaties in EF
  1. Foreign Key Property
  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property

Slide 26 - Tekstslide

Deze slide heeft geen instructies

( 1. Foreign Key Property )
Hoe noem je de foreign key property in een model Book, die verwijst naar de bijbehorende Id (int) van de Author?

public int ... { get; set; }

Slide 27 - Open vraag

Deze slide heeft geen instructies

( 2. Navigation Property )
Hoe ziet de Navigation Property eruit voor de relatie met het 'Author' model, in de 'Book'-klasse?

... ... ... { get; set; }

Slide 28 - Open vraag

Deze slide heeft geen instructies

Room
Guest
Entity
Id
FirstName
LastName

Slide 29 - Sleepvraag

Deze slide heeft geen instructies

Wat komt op de lege plek, als we de
kamer die hoort bij de Guest willen
ophalen?

Slide 30 - Open vraag

Deze slide heeft geen instructies

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

Slide 31 - Tekstslide

Deze slide heeft geen instructies

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

Slide 32 - Tekstslide

Deze slide heeft geen instructies

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

Slide 33 - Tekstslide

Deze slide heeft geen instructies

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

Slide 34 - 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 35 - 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 36 - 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 37 - 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 38 - 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 39 - 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 40 - 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 41 - 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 42 - Tekstslide

Deze slide heeft geen instructies

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

Slide 43 - Open vraag

Deze slide heeft geen instructies

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

Slide 44 - 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 45 - 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 46 - Quizvraag

Deze slide heeft geen instructies

Opdracht: Relaties toevoegen (x2)
Doel: oefenen hoe we relaties in een app zoals de
ChatMeister kunnen toevoegen

  • Download het eerste startpunt: GameModBrowser
  • Voeg relaties toe aan de App (zie instructies rechts)
  • Herhaal voor het tweede startpunt ShopProductApp
πŸ‘§ Werk zelfstandig
🎧 Muziek mag (headset)
πŸ‘“ Lees de paragrafen in H4 goed
πŸ• 30 Γ‘ 45 minuten
Stappenplan relatie toevoegen:
  1. Foreign Key Property
  2. Navigation Property
  3. Zorg dat er gegevens in de database staan (bijv. met seeder)
  4. Haal gerelateerde gegevens op met .Include(...)
  5. Toon de data via de Navigation Property
🏁Snel klaar? Geen vragen? Lekker bezig!
  • Voeg een zoekfunctie toe aan de apps
  • Bekijk hoe de datum in de eerste app, en Price in de tweede app worden geformatteerd. Dit wordt gedaan met een 'computed property':
  • Zorg dat met een 'computer property' de tekst 'kg' achter Weight in de tweede app wordt geformatteerd.

Slide 47 - Tekstslide

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

context.Entry(chat)
       .Collection(c => c.Messages)
       .Query()
       .Include(m => m.User)
       .Load();
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.4. Voeg ook Navigation Properties toe om de relatie tussen User en Message vast te leggen.

πŸ‘©β€πŸ’» Zorg dat bij het laden van de messages, ook de bijbehorende Users worden geladen d.m.v. Eager Loading. Zie daarvoor paragraaf 4.3. Toon in de Messages ListView de namen van die users
πŸ‘§ Werk zelfstandig
🎧 Muziek mag (headset)
πŸ‘“ Lees de paragrafen goed
πŸ• 30 Γ‘ 40 minuten

Slide 48 - 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 49 - Tekstslide

Deze slide heeft geen instructies