7

Buscando escribir código de auditoría genérico en mi subclase DbContext.Entity Framework Change Tracking API y entradas de referencia

foreach (var entry in this.ChangeTracker.Entries<MyClass>()) 
{ 
    if (entry.State == EntityState.Modified) 
    { 
     var entityProperties = entry.Entity.GetType().GetProperties(); 
     foreach (var entityProperty in entityProperties) 
     { 
      DbMemberEntry propertyEntry = entry.Member(property.Name); 
      if (propertyEntry is DbPropertyEntry) 
      { 
       // IsModified available 
      } 
      else if (propertyEntry is DbReferenceEntry) 
      { 
       // IsModified not available 
      } 
     } 
    } 
} 

1) Si solo cambio una propiedad de referencia, la entrada. El valor del estado es "Sin cambios".

2) Incluso si el punto 1 se estableció en "Modificado", la clase DbReferenceEntry no parece tener una propiedad IsModified, ni un valor original.

Supongo que esto es posible porque EF debe hacer un seguimiento de esto.

¿Alguien puede ayudar?

Gracias, Ben

Respuesta

6

Sí entrada de referencia (propiedad de navegación) no controla los cambios. Es responsabilidad de la propiedad de clave externa (en caso de asociación de clave externa) o de los cambios de seguimiento de objeto independientes de la asociación independiente. En ObjectContext API puede obtener estos objetos por ObjectStateManager pero parece que DbContext API no tiene esto disponible. Hice una pregunta sobre esto en MSDN Forum.