Sobes.tech
Middle

¿Qué es el seguimiento de cambios (change tracking)?

sobes.tech AI

Respuesta de la IA

El seguimiento de cambios es un mecanismo en ORM (Object-Relational Mapper), como Entity Framework, que rastrea el estado de las entidades (objetos) cargadas en el contexto de datos. Determina qué entidades han sido añadidas, modificadas o eliminadas, para que al guardar los cambios en la base de datos se ejecuten los comandos correspondientes INSERT, UPDATE o DELETE.

Estados de las entidades:

  • Added: Objeto recién creado y añadido al contexto, pero aún no guardado en la base de datos.
  • Unchanged: Objeto cargado desde la base de datos o guardado, sin cambios realizados.
  • Modified: Uno o más atributos del objeto han sido modificados después de cargarlo desde la base de datos o guardarlo.
  • Deleted: Objeto marcado para ser eliminado de la base de datos.
  • Detached: Objeto que no es rastreado por el contexto de datos.
// Ejemplo de seguimiento de cambios en Entity Framework Core
using (var context = new MyDbContext())
{
    // Cargar entidad
    var myEntity = context.MyEntities.Find(1);

    // Ver estado inicial
    Console.WriteLine($"Estado inicial: {context.Entry(myEntity).State}"); // Mostrará Unchanged

    // Modificar propiedad
    myEntity.MyProperty = "Nuevo Valor";

    // Ver estado después de la modificación
    Console.WriteLine($"Estado después de la modificación: {context.Entry(myEntity).State}"); // Mostrará Modified

    // Añadir una nueva entidad
    var newEntity = new MyEntity { MyProperty = "Otra Nueva" };
    context.MyEntities.Add(newEntity);

    // Ver estado de la entidad añadida
    Console.WriteLine($"Estado de la nueva entidad: {context.Entry(newEntity).State}"); // Mostrará Added

    // Marcar entidad para eliminación
    context.MyEntities.Remove(myEntity);

    // Ver estado después de la eliminación
    Console.WriteLine($"Estado después de la eliminación: {context.Entry(myEntity).State}"); // Mostrará Deleted

    // Guardar cambios en la base de datos
    context.SaveChanges();
}