Was ist Entity Framework Core?
Die meisten nicht trivialen Webanwendungen müssen zuverlässig Datenvorgänge wie das Erstellen, Lesen, Aktualisieren und Löschen (Create, Read, Update, Delete – CRUD) ausführen. Sie müssen außerdem alle Änderungen, die von diesen Vorgängen vorgenommen werden, zwischen Anwendungsneustarts dauerhaft speichern. Es gibt zwar verschiedene Optionen zum Beibehalten von Daten in .NET-Anwendungen, aber Entity Framework (EF) Core ist eine benutzerfreundliche Lösung und eignet sich hervorragend für viele .NET-Anwendungen.
Grundlegendes zu EF Core
EF Core ist eine einfache, erweiterbare Open Source- und plattformübergreifende Datenzugriffstechnologie für .NET-Anwendungen.
EF Core kann als objektrelationale Zuordnung mit folgender Aufgabe fungieren:
- Ermöglicht .NET-Entwicklern das Arbeiten mit einer Datenbank unter Verwendung von .NET-Objekten.
- Der größte Teil des Datenzugriffscodes, der normalerweise geschrieben werden muss, wird überflüssig.
EF Core unterstützt eine große Anzahl beliebter Datenbanken, einschließlich SQLite, MySQL, PostgreSQL, Oracle und Microsoft SQL Server.
Die Model-Komponente
Bei EF Core erfolgt der Datenzugriff über ein Modell. Ein Modell setzt sich aus Entitätsklassen und einem Kontextobjekt zusammen, das eine Sitzung mit der Datenbank darstellt. Das Kontextobjekt ermöglicht das Abfragen und Speichern von Daten.
Die Entitätsklasse
In diesem Szenario implementieren Sie eine Pizzeria-Verwaltungs-API, also verwenden Sie eine Pizza-Entitätsklasse. Die Pizzas in Ihrem Geschäft haben einen Namen und eine Beschreibung. Außerdem benötigen Sie eine ID, damit die API und die Datenbank sie identifizieren können. Die Pizza-Entitätsklasse, die Sie in Ihrer Anwendung verwenden, identifiziert Pizzas:
namespace PizzaStore.Models
{
public class Pizza
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
}
}
Die Kontextklasse
Diese Anwendung verfügt zwar nur über eine Entitätsklasse, aber die meisten Anwendungen verfügen über mehrere Entitätsklassen. Die Kontextklasse ist für das Abfragen und Speichern von Daten in Ihren Entitätsklassen sowie für das Erstellen und Verwalten der Datenbankverbindung zuständig.
Ausführen von CRUD-Vorgängen mit EF Core
Nach der Konfiguration können Sie EF Core verwenden, um CRUD-Vorgänge für Ihre Entitätsklassen auszuführen. Anschließend können Sie für C#-Klassen entwickeln und die Datenbankvorgänge an die Kontextklasse delegieren. Datenbankanbieter übersetzen sie wiederum in eine datenbankspezifische Abfragesprache. Ein Beispiel ist SQL für eine relationale Datenbank. Abfragen werden immer für die Datenbank ausgeführt, auch wenn die im Ergebnis zurückgegebenen Entitäten bereits im Kontext vorhanden sind.
Daten abfragen
Das Kontextobjekt macht für jeden Entitätstyp eine Sammlungsklasse verfügbar. Im vorherigen Beispiel macht die Kontextklasse eine Sammlung von Pizza-Objekten als Pizzas verfügbar. Da wir über eine Instanz der Kontextklasse verfügen, können Sie die Datenbank nach allen Pizzas abfragen:
var pizzas = await db.Pizzas.ToListAsync();
Einfügen von Daten
Sie können das gleiche Kontextobjekt verwenden, um eine neue Pizza einzufügen:
await db.pizzas.AddAsync(
new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });
Löschen von Daten
Löschvorgänge sind einfach. Sie erfordern nur eine ID des Elements, das gelöscht werden soll:
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
db.pizzas.Remove(pizza);
Aktualisieren von Daten
Auf ähnliche Weise können Sie eine vorhandene Pizza aktualisieren:
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();
Verwenden der In-Memory-Datenbank von EF Core
EF Core enthält einen In-Memory-Datenbankanbieter, der zum Testen Ihrer Anwendung verwendet werden kann. Der In-Memory Database-Anbieter ist für Tests und Entwicklung nützlich, sollte aber nicht in der Produktion verwendet werden. In der nächsten Einheit verwenden Sie den In-Memory-Datenbankanbieter, um eine Datenbank zu erstellen und CRUD-Vorgänge dafür auszuführen.