Hvad er Entity Framework Core?
De fleste ikke-banale webprogrammer skal køre handlinger på data på en pålidelig måde, f.eks. oprette, læse, opdatere og slette (CRUD). De skal også bevare eventuelle ændringer, der er foretaget af disse handlinger mellem genstart af programmet. Selvom der er forskellige muligheder for at bevare data i .NET-programmer, er Entity Framework (EF) Core en brugervenlig løsning og velegnet til mange .NET-programmer.
Forstå EF Core
EF Core er en letvægts, fleksibel, åben kildekode og teknologi til dataadgang på tværs af platforme til .NET-programmer.
EF Core kan fungere som en objekt-relationel mapper, som:
- Gør det muligt for .NET-udviklere at arbejde med en database ved hjælp af .NET-objekter.
- Fjerner behovet for det meste af den dataadgangskode, der typisk skal skrives.
EF Core understøtter et stort antal populære databaser, herunder SQLite, MySQL, PostgreSQL, Oracle og Microsoft SQL Server.
Modellen
Med EF Core udføres dataadgang ved hjælp af en model. En model består af objektklasser og et kontekstobjekt, der repræsenterer en session med databasen. Kontekstobjektet gør det muligt at forespørge på og gemme data.
Objektklassen
I dette scenarie implementerer du en API til administration af pizzalager, så du bruger en Pizza objektklasse. Pizzaerne i din butik har et navn og en beskrivelse. De skal også bruge et id for at gøre det muligt for API'en og databasen at identificere dem. Den Pizza objektklasse, du bruger i dit program, identificerer pizzaer:
namespace PizzaStore.Models
{
public class Pizza
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
}
}
Kontekstklassen
Dette program har kun én objektklasse, men de fleste programmer har flere objektklasser. Kontekstklassen er ansvarlig for at forespørge på og gemme data til dine objektklasser og for at oprette og administrere databaseforbindelsen.
Udfør CRUD-handlinger med EF Core
Når EF Core er konfigureret, kan du bruge den til at udføre CRUD-handlinger på dine objektklasser. Derefter kan du udvikle mod C#-klasser og delegere databasehandlinger til kontekstklassen. Databaseprovidere oversætter den til databasespecifikt forespørgselssprog. Et eksempel er SQL for en relationsdatabase. Forespørgsler udføres altid i databasen, selvom de objekter, der returneres i resultatet, allerede findes i konteksten.
Forespørg om data
Kontekstobjektet viser en samlingsklasse for hver objekttype. I det foregående eksempel viser kontekstklassen en samling af Pizza objekter som Pizzas. Da vi har en forekomst af kontekstklassen, kan du forespørge databasen om alle pizzaer:
var pizzas = await db.Pizzas.ToListAsync();
Indsæt data
Du kan bruge det samme kontekstobjekt til at indsætte en ny pizza:
await db.pizzas.AddAsync(
new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });
Slet data
Sletningshandlinger er enkle. De kræver kun et id for elementet, der skal slettes:
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
db.pizzas.Remove(pizza);
Opdater data
På samme måde kan du opdatere en eksisterende pizza:
int id = 1;
var updatepizza = new Pizza { Name = "Pineapple", Description = "Ummmm?" };
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
pizza.Description = updatepizza.Description;
pizza.Name = updatepizza.Name;
await db.SaveChangesAsync();
Brug EF Core-databasen i hukommelsen
EF Core indeholder en databaseprovider i hukommelsen, der kan bruges til at teste dit program. Databaseprovideren i hukommelsen er nyttig til test og udvikling, men den bør ikke bruges i produktion. I det næste undermodul skal du bruge udbyderen af databasen i hukommelsen til at oprette en database og udføre CRUD-handlinger på den.