Sobes.tech
Middle

O que é rastreamento de alterações (change tracking)?

sobes.tech IA

Resposta da IA

O acompanhamento de alterações é um mecanismo no ORM (Object-Relational Mapper), como o Entity Framework, que rastreia o estado das entidades (objetos) carregadas no contexto de dados. Ele determina quais entidades foram adicionadas, modificadas ou eliminadas, para que ao guardar as alterações na base de dados sejam executados os comandos correspondentes INSERT, UPDATE ou DELETE.

Estados das entidades:

  • Added: Objeto recém-criado e adicionado ao contexto, mas ainda não guardado na base de dados.
  • Unchanged: Objeto carregado da base de dados ou guardado, sem alterações feitas.
  • Modified: Um ou mais atributos do objeto foram modificados após carregá-lo ou guardá-lo.
  • Deleted: Objeto marcado para ser eliminado da base de dados.
  • Detached: Objeto que não é rastreado pelo contexto de dados.
// Exemplo de rastreamento de alterações no Entity Framework Core
using (var context = new MyDbContext())
{
    // Carregar entidade
    var myEntity = context.MyEntities.Find(1);

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

    // Modificar propriedade
    myEntity.MyProperty = "Novo Valor";

    // Ver estado após modificação
    Console.WriteLine($"Estado após modificação: {context.Entry(myEntity).State}"); // Mostrará Modified

    // Adicionar uma nova entidade
    var newEntity = new MyEntity { MyProperty = "Outra Nova" };
    context.MyEntities.Add(newEntity);

    // Ver estado da nova entidade
    Console.WriteLine($"Estado da nova entidade: {context.Entry(newEntity).State}"); // Mostrará Added

    // Marcar entidade para eliminação
    context.MyEntities.Remove(myEntity);

    // Ver estado após eliminação
    Console.WriteLine($"Estado após eliminação: {context.Entry(myEntity).State}"); // Mostrará Deleted

    // Guardar alterações na base de dados
    context.SaveChanges();
}