Introduction à Entity Framework Core en C#
Apprenez les bases d’Entity Framework Core en C#, y compris DbContext et les opérations de base avec la base de données.
Entity Framework Core (EF Core) est un mappeur objet-relationnel (ORM) dans l’écosystème .NET, qui permet d’effectuer des opérations sur la base de données avec une approche orientée objet. Avec EF Core, les tables de la base de données peuvent être gérées via des classes C# sans écrire de requêtes SQL brutes. Dans cet article, nous allons couvrir les bases d’EF Core : DbContext, définition des entités et opérations CRUD de base. (Nous n’entrerons pas dans les détails spécifiques à MS-SQL, uniquement l’approche générale d’EF Core.)
Avantages d’EF Core
- Approche ORM : effectuer des opérations sur la base de données avec du code C# au lieu de SQL.
- Sécurité de type : les requêtes LINQ sont vérifiées à la compilation.
- Portabilité : EF Core prend en charge de nombreux fournisseurs de bases de données (SQLite, PostgreSQL, MySQL, etc.).
- Développement Code-First : les tables de la base de données peuvent être créées directement à partir des classes C#.
Définir une entité
Dans EF Core, une table de base de données est généralement représentée par une classe C#. Les propriétés de la classe correspondent aux colonnes de la table.
public class Product
{
public int Id { get; set; } // Clé primaire
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
La classe DbContext
DbContext est le cœur d’EF Core.
Elle gère la connexion à la base de données et les interactions avec les tables.
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Configurer le fournisseur de base de données ici
optionsBuilder.UseInMemoryDatabase("TestDb");
}
}
Remarque : Dans cet exemple, nous utilisons InMemoryDatabase pour simplifier.
Opérations CRUD de base
Avec EF Core, les opérations Create, Read, Update, Delete peuvent être effectuées facilement.
using (var db = new AppDbContext())
{
// CREATE
db.Products.Add(new Product { Name = "Ordinateur portable", 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();
}
Requêtes avec LINQ
EF Core s’intègre parfaitement avec LINQ (Language Integrated Query). Cela permet d’écrire des requêtes puissantes et typées sans SQL brut.
// Sélectionner les produits plus chers que 1000
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);
}
Le concept de Migrations
EF Core propose les Migrations pour créer ou mettre à jour le schéma de la base de données directement depuis le code. Les modifications apportées au code sont suivies et appliquées à la base avec des migrations.
// Exemples de commandes (à exécuter en CLI)
// dotnet ef migrations add InitialCreate
// dotnet ef database update
Résumé (TL;DR)
- EF Core simplifie les opérations sur la base de données grâce à l’approche ORM.
DbContext: gère la connexion à la base et les tables.Entity: classes C# représentant les tables.- CRUD (Créer, Lire, Mettre à jour, Supprimer) est facile à réaliser.
- LINQ permet d’écrire des requêtes typées.
- Migrations permettent de gérer le schéma de la base depuis le code.