Einführung in Entity Framework Core in C#
Lernen Sie die Grundlagen von Entity Framework Core in C#, einschließlich DbContext und Datenbankoperationen.
Entity Framework Core (EF Core) ist ein objekt-relationaler Mapper (ORM) im .NET-Ökosystem, mit dem Datenbankoperationen objektorientiert durchgeführt werden können. Mit EF Core lassen sich Datenbanktabellen über C#-Klassen verwalten, ohne rohe SQL-Abfragen schreiben zu müssen. In diesem Artikel behandeln wir die Grundlagen von EF Core, einschließlich DbContext, Entity-Definitionen und grundlegenden CRUD-Operationen. (Wir gehen nicht speziell auf MS-SQL ein, sondern beschreiben den allgemeinen EF-Core-Ansatz.)
Vorteile von EF Core
- ORM-Ansatz: Datenbankoperationen werden mit C#-Code statt mit SQL durchgeführt.
- Typsicherheit: LINQ-Abfragen werden zur Kompilierzeit überprüft.
- Portabilität: EF Core unterstützt viele Datenbankanbieter (SQLite, PostgreSQL, MySQL usw.).
- Code-First-Entwicklung: Datenbanktabellen können direkt aus C#-Klassen erstellt werden.
Entity definieren
In EF Core wird eine Datenbanktabelle in der Regel durch eine C#-Klasse dargestellt. Die Eigenschaften der Klasse werden den Tabellenspalten zugeordnet.
public class Product
{
public int Id { get; set; } // Primärschlüssel
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
Die DbContext-Klasse
DbContext ist das Herzstück von EF Core.
Sie verwaltet die Datenbankverbindung und die Interaktion mit den Tabellen.
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Datenbankanbieter hier konfigurieren
optionsBuilder.UseInMemoryDatabase("TestDb");
}
}
Hinweis: In diesem Beispiel wird zur Vereinfachung InMemoryDatabase verwendet.
Grundlegende CRUD-Operationen
Mit EF Core können Create, Read, Update, Delete-Operationen einfach ausgeführt werden.
using (var db = new AppDbContext())
{
// CREATE
db.Products.Add(new Product { Name = "Laptop", Price = 1500 });
db.SaveChanges();
// READ
var products = db.Products.ToList();
foreach (var p in products)
Console.WriteLine($"{p.Id} - {p.Name} - {p.Price}");
// UPDATE
var product = db.Products.First();
product.Price = 1400;
db.SaveChanges();
// DELETE
db.Products.Remove(product);
db.SaveChanges();
}
Abfragen mit LINQ
EF Core arbeitet nahtlos mit LINQ (Language Integrated Query) zusammen. Dadurch können starke, typsichere Abfragen ohne SQL geschrieben werden.
// Produkte auswählen, die teurer als 1000 sind
using (var db = new AppDbContext())
{
var expensive = db.Products
.Where(p => p.Price > 1000)
.OrderBy(p => p.Name);
foreach (var item in expensive)
Console.WriteLine(item.Name);
}
Das Konzept der Migrationen
EF Core bietet Migrationen, um das Datenbankschema direkt aus dem Code zu erstellen oder zu aktualisieren. Änderungen im Code werden nachverfolgt und mit Migrationen in die Datenbank übernommen.
// Beispielbefehle (über CLI auszuführen)
// dotnet ef migrations add InitialCreate
// dotnet ef database update
Kurz & Knapp
- EF Core vereinfacht Datenbankoperationen mit dem ORM-Ansatz.
DbContext: Verwaltet die Datenbankverbindung und Tabellen.Entity: C#-Klassen, die Tabellen repräsentieren.- CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) sind einfach umsetzbar.
- LINQ ermöglicht typsichere Abfragen.
- Migrationen erlauben die Verwaltung des Datenbankschemas direkt aus dem Code.