tutorial net homepage framework first example code changetracker c# entity-framework-4 dbcontext change-tracking

c# - net - Cómo funciona el seguimiento de cambios en Entity Framework



function in entity framework (1)

Cuando carga la entidad desde el contexto, mantiene una estructura de datos adicional, llamémosla entrada. La entrada contiene dos conjuntos de valores: valores originales y valores actuales. Cuando ejecuta la operación SaveChanges , EF pasa por las entidades de sus clientes y actualiza los valores actuales en la entrada para que coincidan con el estado real de su entidad: esta operación se denomina detección de cambios . Durante la generación del comando SQL, EF comparará los valores actuales y los originales y creará una declaración de actualización SQL para modificar los valores modificados en la base de datos. Esta operación se denomina seguimiento de cambio de instantánea : EF mantiene una instantánea en la entrada.

Existe una alternativa llamada seguimiento de cambio dinámico que modificará el valor actual en la entrada al mismo tiempo que asigna el valor a la propiedad de su entidad. El seguimiento de cambios dinámicos tiene requisitos específicos (como que todas sus propiedades en la entidad deben ser virtual ) porque debe ajustar su clase a un proxy dinámico en tiempo de ejecución. Esta solía ser la forma preferida, pero debido a algunos problemas de rendimiento en escenarios complejos, actualmente se supone que el seguimiento de cambios de instantáneas se usa como predeterminado.

Dado el siguiente código, ¿cómo sabe EF / DbContext sobre el cambio realizado en el objeto del cliente ?

class Program { static void Main() { using(var shopContext = new ShopContext()) { var customer = shopContext.Customers.Find(7); customer.City = "Marion"; customer.State = "Indiana"; shopContext.SaveChanges(); } } } public class ShopContext : DbContext { public DbSet<Customer> Customers { get; set; } } public class Customer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string City { get; set; } public string State { get; set; } }

Gracias