Vad är Entity Framework Core?

Slutförd

De flesta icke-triviala webbprogram måste köra åtgärder på ett tillförlitligt sätt på data, till exempel skapa, läsa, uppdatera och ta bort (CRUD). De måste också spara alla ändringar som görs av dessa åtgärder mellan programomstarter. Även om det finns olika alternativ för att bevara data i .NET-program är Entity Framework (EF) Core en användarvänlig lösning och passar bra för många .NET-program.

Förstå EF Core

EF Core är en lätt, utökningsbar, öppen källkod och plattformsoberoende dataåtkomstteknik för .NET-program.

EF Core kan fungera som en objektrelationsmappare, som:

  • Gör att .NET-utvecklare kan arbeta med en databas med hjälp av .NET-objekt.
  • Eliminerar behovet av de flesta dataåtkomstkoder som vanligtvis behöver skrivas.

EF Core stöder ett stort antal populära databaser, inklusive SQLite, MySQL, PostgreSQL, Oracle och Microsoft SQL Server.

Modellen

Med EF Core utförs dataåtkomst med hjälp av en modell. En modell består av entitetsklasser och ett kontextobjekt som representerar en session med databasen. Med kontextobjektet kan du köra frågor mot och spara data.

Entitetsklassen

I det här scenariot implementerar du ett API för hantering av pizzalager, så du använder en entitetsklass Pizza . Pizzan i din butik har ett namn och en beskrivning. De behöver också ett ID för att api:et och databasen ska kunna identifiera dem. Entitetsklassen Pizza som du använder i ditt program identifierar pizzor:

namespace PizzaStore.Models 
{
  public class Pizza
  {
      public int Id { get; set; }
      public string? Name { get; set; }
      public string? Description { get; set; }
  }
}

Kontextklassen

Det här programmet har bara en entitetsklass, men de flesta program har flera entitetsklasser. Kontextklassen ansvarar för att fråga och spara data till dina entitetsklasser och för att skapa och hantera databasanslutningen.

Utföra CRUD-åtgärder med EF Core

När EF Core har konfigurerats kan du använda det för att utföra CRUD-åtgärder på dina entitetsklasser. Sedan kan du utveckla mot C#-klasser och delegera databasåtgärderna till kontextklassen. Databasprovidrar översätter den i sin tur till databasspecifikt frågespråk. Ett exempel är SQL för en relationsdatabas. Frågor körs alltid mot databasen, även om entiteterna som returneras i resultatet redan finns i kontexten.

Fråga efter data

Kontextobjektet exponerar en samlingsklass för varje entitetstyp. I föregående exempel exponerar kontextklassen en samling Pizza objekt som Pizzas. Eftersom vi har en instans av kontextklassen kan du fråga databasen efter alla pizzor:

var pizzas = await db.Pizzas.ToListAsync();

Infoga data

Du kan använda samma kontextobjekt för att infoga en ny pizza:

await db.pizzas.AddAsync(
    new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });

Ta bort data

Borttagningsåtgärder är enkla. De kräver bara att ett ID för objektet tas bort:

var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
    //Handle error
}
db.pizzas.Remove(pizza);

Uppdatera data

På samma sätt kan du uppdatera en befintlig 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();

Använda EF Core-databasen i minnet

EF Core innehåller en minnesintern databasprovider som kan användas för att testa ditt program. Databasprovidern i minnet är användbar för testning och utveckling, men den bör inte användas i produktion. I nästa lektion använder du den minnesinterna databasprovidern för att skapa en databas och utföra CRUD-åtgärder på den.