Sobes.tech
Middle

Qu'est-ce que le suivi des modifications (change tracking) ?

sobes.tech IA

Réponse de l'IA

Le suivi des modifications est un mécanisme dans ORM (Object-Relational Mapper), comme Entity Framework, qui suit l'état des entités (objets) chargées dans le contexte de données. Il détermine quelles entités ont été ajoutées, modifiées ou supprimées, afin que lors de l'enregistrement des modifications dans la base de données, les commandes INSERT, UPDATE ou DELETE appropriées soient exécutées.

États des entités :

  • Added : Objet récemment créé et ajouté au contexte, mais pas encore enregistré dans la base de données.
  • Unchanged : Objet chargé depuis la base de données ou sauvegardé, sans modifications.
  • Modified : Un ou plusieurs attributs de l'objet ont été modifiés après son chargement ou sa sauvegarde.
  • Deleted : Objet marqué pour être supprimé de la base de données.
  • Detached : Objet qui n'est pas suivi par le contexte de données.
// Exemple de suivi des modifications dans Entity Framework Core
using (var context = new MyDbContext())
{
    // Charger l'entité
    var myEntity = context.MyEntities.Find(1);

    // Vérifier l'état initial
    Console.WriteLine($"État initial : {context.Entry(myEntity).State}"); // Affichera Unchanged

    // Modifier une propriété
    myEntity.MyProperty = "Nouvelle Valeur";

    // Vérifier l'état après modification
    Console.WriteLine($"État après modification : {context.Entry(myEntity).State}"); // Affichera Modified

    // Ajouter une nouvelle entité
    var newEntity = new MyEntity { MyProperty = "Une autre nouvelle" };
    context.MyEntities.Add(newEntity);

    // Vérifier l'état de la nouvelle entité
    Console.WriteLine($"État de la nouvelle entité : {context.Entry(newEntity).State}"); // Affichera Added

    // Marquer l'entité pour suppression
    context.MyEntities.Remove(myEntity);

    // Vérifier l'état après suppression
    Console.WriteLine($"État après suppression : {context.Entry(myEntity).State}"); // Affichera Deleted

    // Enregistrer les modifications dans la base de données
    context.SaveChanges();
}