Entity Framework (EF) est ce qu’on appelle un ORM (Object-Relational Mapper), c’est-à-dire un outil qui permet de manipuler une base de données comme si c'était des objets dans ton code (C#, typiquement).
Quand tu parles de "other mapper", tu peux penser à :
-
Dapper (très connu aussi en .NET)
-
NHibernate (plus ancien)
-
ou d’autres ORMs plus légers.
Voici les grandes différences principales :
Entity Framework | Dapper / autres ORMs | |
---|---|---|
Type | ORM complet (full ORM) | Micro-ORM (Dapper) ou ORM différent (NHibernate) |
Simplicité | Très haut niveau : tu écris peu de SQL | Dapper : tu écris toi-même les requêtes SQL |
Performance | Moins rapide que Dapper (car beaucoup d'abstractions) | Dapper : ultra rapide, car léger (presque brut) |
Fonctionnalités | Migration de bases de données, suivi de changement (Change Tracking), relations complexes (OneToMany, etc.) | Dapper : uniquement du mapping objet, pas de suivi d'état, ni de migrations |
Apprentissage | Facile pour débutant | Dapper demande plus de connaissance SQL |
Contrôle | Moins de contrôle sur le SQL généré (caché par EF) | Dapper : contrôle total sur ce que tu fais |
Pour donner une image :
-
Entity Framework : "Tu lui dis : Je veux ajouter un client", et il fait tout pour toi (écrit l'
INSERT
, gère les relations, etc.). -
Dapper : "Écris ton
INSERT INTO Clients (Nom, Age) VALUES (@Nom, @Age)
toi-même", et Dapper va juste convertir le résultat en objets.
Donc, tu choisis selon le projet :
-
EF si tu veux aller vite, écrire peu de code, sans trop t’embêter (ex : applications métiers internes, prototypes rapides).
-
Dapper si tu veux des performances maximales ou que tu veux garder le contrôle sur les requêtes SQL.
Entity Framework:
public class Client
{
public int Id { get; set; }
public string Nom { get; set; }
public int Age { get; set; }
}
// DbContext
public class AppDbContext : DbContext
{
public DbSet<Client> Clients { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("ta_chaine_de_connexion");
}
}
// Utilisation
using (var context = new AppDbContext())
{
// Ajouter un client
var client = new Client { Nom = "Jean", Age = 30 };
context.Clients.Add(client);
context.SaveChanges();
// Lire les clients
var clients = context.Clients.ToList();
}
Aucun commentaire:
Enregistrer un commentaire