Softwarearkitektur - Opgaver Modul 6 - Entity Framework

Opgave 1 - Et nyt lille projekt

Du har fået til opgave at kode et nyt opgave-system (lidt som Trello).

Start med et helt nyt “console” project hvor du initaliserer Entity Framework. Du kan følge vejledningen fra sidst.

Du skal nu lave en model med tre klasser:

En Todo har en User tilknyttet. Et Board har en til-mange relation til Todo.

Start med at tegne et UML klassediagram der overholder specifikationen ovenfor.

Kod modellen, lav en migration, kør migrationen på en ny database, og opret noget data igennem Program.cs.

Test at det hele virker.

Opgave 2 - Model-ændringer

Du får nu at vide, at Todo skal ændres. I stedet for et name og en category, skal de to ting nu slås sammen til en titel. Titler på eksisterende tasks skal stå på formen “category: name” (nye titler behøver ikke overholde dette format). Du må ikke miste dit gamle data i databasen. I stedet skal det konverteres til det nye format.

Kort og godt, så skal du slå to gamle kolonner sammen til en ny kolonne i databasen, uden at miste data. Få inspiration fra dagens præsentation og den officielle dokumentation til EF.

Opgave 3 - Undersøg en skabelon til Web API + Entity Framework

Her er et lille mini-projekt der viser, hvordan man kan lave en Web API, der benytter Entity Framework. Koden kan findes på GitHub i fagets repository under /modul06/book-api-ef.

Gør følgende:

  1. Skaf en kopi af koden
  2. Lav databasen (dotnet ef database update)
  3. Test projektet med Postman.

Undersøg nu koden og svar på følgende spørgsmål:

  1. Hvad er formålet med de to migrations der ligger i projektet? Hvad er forskellen på dem?
  2. Hvad er formålet med SeedData() i klassen DataService.cs?
  3. Hvad er formålet med resten af klassen DataService.cs, dvs. de andre metoder?
  4. I Program.cs laves endpoints der kan bruge til at hente og oprette data. Hvordan får de endpoints fat i en DataService?
  5. Hvor i projektet anvendes BookContext og til hvad?
  6. Der tilføjes ikke mindre end tre services i Program.cs. Hvad bruges de til og hvor?
  7. Hvor finder man “database connect string” som Entity Framework bruger til at oprette en sqlite-fil?
  8. Find koden til app.MapGet("/api/books" .... Hvad sker der hvis man inkluderer b.Author.Books i author og herefter kører en GET på books? Og hvorfor sker det?
  9. Hvad er middleware?
  10. Hvad vil det sige at “seede data”?

Opgave 4 - Sæt Web API og EF sammen

Brug projektet fra opgave 3 som skabelon, og lav en ny Web API baseret på modellen fra opgave 2.

Opgave 5 - Ekstraopgave - Brug Postgresql

Skift “sqlite” ud med “postgresql” i dit projekt fra sidste opgave.

Det er kun sqlite-koden i projektet der skal justeres.

Du skal også have installeret en ny NuGet-pakke:

https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL