ORM pour C# (.NET) : aperçu, comparaison et exemples
Object-Relational Mapping (ORM) est une technologie qui permet aux développeurs de travailler avec des bases de données via un code orienté objet, en s'abstrayant des requêtes SQL. Dans l'écosystème .NET, il existe plusieurs bibliothèques ORM populaires, chacune ayant ses forces et ses faiblesses. Dans cet article, nous examinerons trois outils principaux : Entity Framework Core, Dapper et NHibernate, comparerons leurs performances, leur facilité d'utilisation et fournirons des exemples pratiques de code en C#.
1. Entity Framework Core (EF Core)
EF Core est l'ORM officiel de Microsoft, successeur d'Entity Framework 6. Il prend en charge les approches Code First, Database First et Model First, et fournit un puissant fournisseur LINQ pour la construction de requêtes.
Avantages :
- Haute abstraction — minimum de code SQL.
- Migrations automatiques et gestion du schéma de base de données.
- Prise en charge de nombreux fournisseurs (SQL Server, PostgreSQL, SQLite, MySQL).
- Intégration approfondie avec ASP.NET Core.
Inconvénients :
- Performances réduites sur les requêtes complexes.
- Consommation mémoire élevée lors du chargement de données liées.
Exemple de code :
// Modèlepublic class Product{ public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; }}
// Contextepublic class AppDbContext : DbContext{ public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer("YourConnectionString");}
// Utilisationusing var db = new AppDbContext();var cheapProducts = db.Products .Where(p => p.Price < 100) .OrderBy(p => p.Name) .ToList();2. Dapper
Dapper est un micro-ORM léger créé par l'équipe de Stack Overflow. Il étend IDbConnection avec des méthodes d'extension et fonctionne au plus près d'ADO.NET, offrant des performances élevées.
Avantages :
- Extrêmement rapide — presque comme ADO.NET pur.
- Consommation mémoire minimale.
- Contrôle total sur les requêtes SQL.
- Adapté aux systèmes à forte charge.
Inconvénients :
- Pas de génération automatique du schéma de base de données.
- Nécessité d'écrire les requêtes SQL manuellement.
- Absence de suivi des modifications (Change Tracking).
Exemple de code :
using (var connection = new SqlConnection("YourConnectionString")){ var products = connection.Query<Product>( "SELECT * FROM Products WHERE Price < @Price ORDER BY Name", new { Price = 100 }); // Résultats multiples using (var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories")) { var prods = multi.Read<Product>(); var cats = multi.Read<Category>(); }}3. NHibernate
NHibernate est un portage du framework Java populaire Hibernate. Il fournit une implémentation complète d'une approche de type JPA avec un puissant système de mise en cache et la prise en charge d'hiérarchies d'héritage complexes.
Avantages :
- Système de mise en cache avancé (premier et deuxième niveaux).
- Prise en charge du chargement différé (Lazy Loading), HQL (Hibernate Query Language).
- Configuration flexible du mappage via XML ou Fluent API.
- Bien adapté aux projets legacy.
Inconvénients :
- Configuration complexe et courbe d'apprentissage abrupte.
- Plus lent que Dapper et EF Core sur les requêtes simples.
- Mise à jour rare par rapport à EF Core.