c# entity-framework code-first change-tracking

c# - Primero el código de EF 4.1-Determine qué propiedades han cambiado



entity-framework code-first (1)

Estoy usando Entity Framework 4.1 Code First. ¿Existe una forma integrada de obtener una lista de las propiedades que han cambiado desde que se cargó la entidad desde la base de datos? Sé que el código detecta primero que se cambió un objeto, pero ¿hay alguna forma de obtener exactamente qué propiedades han cambiado?


Para las propiedades escalares y complejas, puede usar lo siguiente para extraer los nombres de propiedades modificados de una entidad myEntity :

var entry = context.Entry(myEntity); var namesOfChangedProperties = entry.CurrentValues.PropertyNames .Where(p => entry.Property(p).IsModified);

Algunas cosas a tener en cuenta aquí:

  • CurrentValues.PropertyNames solo contiene propiedades escalares y complejas, no propiedades de navegación.

  • Las propiedades complejas significan: Solo el nombre de la propiedad compleja que se declara en la entidad, no las propiedades individuales reales del tipo complejo, por ejemplo: Si tiene este modelo ...

    [ComplexType] public class Address { public string Country { get; set; } public string City { get; set; } } public class Person { public int Id { get; set; } public string Name { get; set; } public Address Address { get; set; } }

    ... entonces, si myEntity es una Person , CurrentValues.PropertyNames contendría " Id ", " Name " y " Address " pero no " Address.Country " o " Address.City " (ni " Country " o " City ") .

  • Si una propiedad compleja se marca como modificada ( .IsModified en el código anterior es true ), esto significa que la referencia ( Person.Address en el ejemplo anterior) ha cambiado, sin importar si en realidad los valores de propiedad ( Country y City ) dentro Del tipo complejo han cambiado o no. O bien, que cualquiera de las propiedades del tipo complejo ha cambiado ( Country o City ha cambiado). Creo que no es posible encontrar cuál, porque EF siempre envía un comando ACTUALIZAR para todas las propiedades de tipo complejo a la base de datos, incluso si solo una propiedad ha cambiado y la otra no ha cambiado. A partir de esto, concluiría que EF no realiza un seguimiento de los cambios de las propiedades de tipo complejo individuales.