Entity Framework Core
Remarque:
ToString
parent
enfant
Surcharge methode normale
parent
enfant
OnConfig :methode de liaison avec base de donnee:
Lazy Loading
(les cles etrangeres lkol nzidouhom virtual)
avant:
apres:
mouhawla 2:
valeur positive:
types détenus (Owned Types)
🔍 13. Chargement des données
Le chargement des données en Entity Framework Core concerne la
façon dont les relations entre entités sont récupérées depuis la
base de données. Imaginons que tu as une classe Student qui a
une relation avec Classroom.
1️⃣ Eager Loading (Chargement anticipé)
● Principe : On charge tout d’un coup, l’entité principale et ses
relations.
● Comment ? Avec .Include() dans la requête.
● Avantages : Pas de surprises, tout est déjà là.
● Inconvénients : Peut être lourd si tu charges beaucoup de
relations inutiles.
Exemple :
var students = [Link]
.Include(s => [Link]) //
on inclut la relation Classroom
.ToList();
● Ici, chaque Student aura son Classroom chargé
immédiatement.
● SQL généré : SELECT * FROM Students INNER JOIN
Classrooms ...
2️⃣ Explicit Loading (Chargement explicite)
● Principe : On charge la relation seulement quand on en a
besoin, manuellement.
● Comment ? Avec
[Link](...).Reference(...).Load() ou
Collection(...).Load().
● Avantages : Plus de contrôle, tu choisis quand charger.
● Inconvénients : Plus de code, plusieurs requêtes possibles.
Exemple :
var student = [Link](1); // on
récupère juste le student
[Link](student)
.Reference(s => [Link]) // on cible la
relation
.Load(); // on charge la
relation explicitement
● SQL généré : deux requêtes séparées : une pour le Student,
une pour le Classroom.
3️⃣ Lazy Loading (Chargement paresseux)
● Principe : La relation est chargée automatiquement
uniquement quand tu y accèdes.
● Comment ?
1. Installer et activer les proxies :
.UseLazyLoadingProxies()
2. Déclarer les propriétés de navigation comme virtual
Exemple :
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Classroom Classroom { get; set; }
// virtual = lazy
}
var student = [Link](1);
var classroom = [Link]; // ici EF Core
charge automatiquement la relation
● SQL généré : une requête supplémentaire est lancée
seulement au moment où on accède à Classroom.
💡 Résumé simple :
Type de Quand la relation est Requêtes Avantage
Loading chargée SQL principal
Eager Tout de suite 1 (join) Tout est prêt
Explicit Quand tu décides Plusieurs Contrôle total
Lazy Quand tu accèdes Automatiq Simple et
ue pratique