Softwarearkitektur - Opgaver Modul 5 - Entity Framework

Opgave 1

Følg vejledningen Kom i gang med Entity Framework.

Opgave 2 - Lav mere CRUD

Efter du har fulgt vejledningen i opgave 1, skal du udvide dit projekte med følgende kode:

  1. Lav en Update: Find en Task og lave ændringer til den.
  2. Lav en Delete: Slet et bestemt task, fx ud fra et søgekriterie.

Se eksempler i dagens præsentation, og kig i følgende dokumentation:

https://docs.microsoft.com/en-us/ef/core/saving/basic

Opgave 3 - Lav ændringer til modellen

Nu skal du forsøge at lave en ændring til din model, og efterfølgende opdatere databasen, med en ny migration.

Gør følgende:

  1. Tilføj den nye property string category til TodoTask-klassen.
  2. Kør kommandoen dotnet ef migrations add "Category added to TodoTask"
  3. Kør kommandoen dotnet ef database update

Kig i databasen for at se om den nye kolonne er kommet på tabellen. Hvad er den sat til på de eksisterende tasks?

Lav ændringer i din kode så nye TodoTasks også får sat en passende category.

Test at det hele virker.

Opgave 4 - Lav referencer i modellen

Du skal prøve at lave en migration mere, men denne gang skal skal du oprette en helt ny Model-klasse.

Klassen skal blot hedde User og skal som minimum indeholde et navn på en bruger. Filen skal hedde User.cs. Namespace skal være det samme som for den anden model-klasse.

TodoTask.cs skal opdateres med et ny property der har typen User.

Lav ændringer i resten af koden så den nye User kommer i spil. Notér ned alle steder hvor du har behov for at ændre koden.

Slut af med at lave en migration der tager User med, og test at det hele virker.

Lidt tips og tricks:

Opgave 5 - Kan du svare på følgende? Test dig selv.

  1. Hvordan ved Entity Framework hvilke migrations der mangler at blive kørt på? Hvor gemmes denne information?
  2. Hvad er formålet med filerne i folderen Migrations i dit projekt? Hvad indeholder de?
  3. Hvad styrer hvad tabellerne i databasen kommer til at hedde? Kan det ændres?
  4. Hvad styrer hvor databasefilen bliver oprettet? Kan det ændres? (gælder kun sqlite)
  5. Hvad sker der hvis du sletter database-filen? Hvordan får du en ny?

Opgave 6 - Entity Framework i en Web API

Næste skridt er at anvende Entity Framework i din frugt-api (eller todo-api) fra tidligere.

En god strategi er at gøre Context-klassen til en “factory service” som kan bruges via “dependency injection”. Se eksempel-koden herunder:

// program.cs

// Tilføj DbContext factory som service
builder.Services.AddDbContext<TaskContext>(options =>
    options.UseSqlite(builder.Configuration.GetConnectionString("TaskContextSQLite")));

// ...

// I dine endpoints kan du nu bruge TaskContext som en dependency
app.MapGet("/api/tasks", (TaskContext db) =>
{
    return db.Tasks;
});

Koden antager at connection string til databasen er angivet i appsettings.json og appsettings.Development.json. Filerne skal bare oprettes i roden af dit projekt, hvis de ikke findes. Her er et eksempel på indholdet:

{
  "ConnectionStrings": {
    "TaskContextSQLite": "Data Source=bin/TodoTask.db"
  }
}