Herunder er en vejledning der hurtigt får dig i gang med Entity Framework.
Start med at installere selve værktøjerne. Dette skal kun gøres én gang per maskine.
$ dotnet tool install --global dotnet-ef
Lav herefter et simpelt console projekt:
$ dotnet new console -o ef-sjov
$ cd ef-sjov/
I projektet skal du installere pakker til Entity Framework:
$ dotnet add package Microsoft.EntityFrameworkCore.SQLite
$ dotnet add package Microsoft.EntityFrameworkCore.Design
$ dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
En model beskriver det data du har i projektet, og består af nogle klasser.
Du skal nu lave en mappe der hedder Model og to filer:
TodoTask er vores model, og TaskContext er en klasse der bruges til at lave en forbindelse til databasen.
Filernes indhold skal du kopiere fra disse skabeloner:
// TodoTask.cs
namespace Model
{
public class TodoTask
{
public TodoTask(string text, bool done) {
this.Text = text;
this.Done = done;
}
public long TodoTaskId { get; set; }
public string? Text { get; set; }
public bool Done { get; set; }
}
}
// TaskContext.cs
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Model
{
public class TaskContext : DbContext
{
public DbSet<TodoTask> Tasks { get; set; }
public string DbPath { get; }
public TaskContext()
{
DbPath = "bin/TodoTask.db";
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite($"Data Source={DbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TodoTask>().ToTable("Tasks");
}
}
}
Du skal lave ændringer i Program.cs som tester de nye klasser. Kopier følgende kode ind i filen:
using Model;
using (var db = new TaskContext())
{
Console.WriteLine($"Database path: {db.DbPath}.");
// Create
Console.WriteLine("Indsæt et nyt task");
db.Add(new TodoTask("En opgave der skal løses", false));
db.SaveChanges();
// Read
Console.WriteLine("Find det sidste task");
var lastTask = db.Tasks
.OrderBy(b => b.TodoTaskId)
.Last();
Console.WriteLine($"Text: {lastTask.Text}");
}
Hvis du kører koden nu, får du SQL-fejl, da databasen ikke er helt på plads endnu. Den opretter vi i næste trin.
Før man kan bruge en database, skal den oprettes. Med Entity Framework gøres ved ved at lave en migration.
Udfør kommandoerne:
$ dotnet ef migrations add InitialCreate
$ dotnet ef database update
Navnet “InitialCreate” er valgfrit, men passer godt til den første migration. Migrationerne navngives efter deres indhold - lige som med commits i git.
Hvis første kommando giver fejl, er det typisk en compile-fejl i selve projektkoden. Se fejlen med kommandoen:
$ dotnet build
Ret eventuelle fejl, kør kommandoerne igen. Start derefter programmet op med dotnet run og se om det virker.
Kør programmet nogle flere gange, så du får lidt mere data i databasen.
Herefter skal du finde et værktøj til at kigge i selve database-filen.
I filen TaskContext.cs kan du se at der står “options.UseSqlite”, så det er sqlite vi har gang i. Databasen-filen ligger i dit projekt - under folderen bin/.
Prøv at kigge i filen med værktøjet DB Browser for SQLite som du kan finde på https://sqlitebrowser.org/, eller du kan måske finde en god vscode-extension til formålet?