ORM für C# (.NET): Vergleich von Entity Framework, Dapper und NHibernate

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

ORM für C# (.NET): Vergleich von Entity Framework Core, Dapper und NHibernate



Bei der Entwicklung von Anwendungen in C# (.NET) kann die Wahl des richtigen ORM (Object-Relational Mapping) die Leistung, Entwicklungsgeschwindigkeit und Wartbarkeit des Codes erheblich beeinflussen. In diesem Artikel vergleichen wir die drei beliebtesten ORMs für das .NET-Ökosystem im Detail: Entity Framework Core (EF Core), Dapper und NHibernate. Sie erfahren ihre Stärken und Schwächen und sehen konkrete Codebeispiele.



Was ist ein ORM und wozu wird es benötigt?

ORM ist eine Technologie, die es ermöglicht, mit Datenbanken über Objekte der Programmiersprache zu arbeiten, anstatt über direkte SQL-Abfragen. Für C# (.NET) automatisiert ORM das Mapping von Tabellen in Klassen, die SQL-Generierung, die Änderungsverfolgung und die Transaktionsverwaltung. Dies beschleunigt die Entwicklung, kann aber bei falscher Verwendung zu Leistungseinbußen führen.



1. Entity Framework Core (EF Core)

EF Core ist die moderne, leichte und erweiterbare Version von Entity Framework von Microsoft. Es ist ein vollwertiges ORM mit einem leistungsstarken LINQ-Anbieter, automatischen Migrationen und Unterstützung für viele DBMS (SQL Server, PostgreSQL, SQLite, MySQL u.a.).



Vorteile:

  • Hohe Entwicklungsgeschwindigkeit dank Code-First- und Database-First-Ansätzen.
  • Leistungsstarke LINQ-Syntax zum Schreiben von Abfragen.
  • Automatische Änderungsverfolgung (Change Tracker).
  • Integrierte Unterstützung für Migrationen.


Nachteile:

  • Langsamer im Vergleich zu Mikro-ORMs (aufgrund des Overheads durch die Nachverfolgung).
  • Schwierigkeiten bei der Optimierung komplexer Abfragen (N+1-Problem).


Codebeispiel (EF Core):

// Modellpublic class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

// Datenbankkontextpublic class AppDbContext : DbContext{ public DbSet<User> Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=MyDb;"); }}

// Verwendungusing (var db = new AppDbContext()){ // Hinzufügen db.Users.Add(new User { Name = "Ivan", Email = "ivan@example.com" }); db.SaveChanges(); // Abfrage via LINQ var users = db.Users.Where(u => u.Name.StartsWith("I")).ToList(); // Ausgabe foreach (var user in users) { Console.WriteLine($"{user.Id}: {user.Name}"); }}


2. Dapper

Dapper ist ein Mikro-ORM, das vom Stack Overflow-Team entwickelt wurde. Es fügt praktisch keinen Overhead hinzu und arbeitet direkt mit ADO.NET. Dapper ist ideal für Projekte, bei denen Leistung und vollständige Kontrolle über SQL entscheidend sind.



Vorteile:

  • Maximale Leistung (nahe an "nackten" ADO.NET-Abfragen).
  • Einfachheit und Minimalismus (eine Datei, wenige Erweiterungsmethoden).
  • Vollständige Kontrolle über SQL-Abfragen.
  • Einfach in bestehende Projekte integrierbar.


Nachteile:

  • Keine Änderungsverfolgung (alles manuell).
  • Keine automatischen Migrationen.
  • SQL-Abfragen müssen manuell geschrieben werden.


Codebeispiel (Dapper):

public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

// Verwendung von Dapperusing (var connection = new SqlConnection(@"Server=(localdb)\\mssqllocaldb;Database=MyDb;")){ connection.Open(); // Einfügen var sqlInsert = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)"; connection.Execute(sqlInsert, new { Name = "Petr", Email = "petr@example.com" }); // Abf

Empfehlungen