Entity Framework Cambio de seguimiento API y entradas de referencia
-
26-10-2019 - |
Pregunta
Buscando escribir código de auditoría genérico en mi subclase DBContext.
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, el valor de entrada. Estado está "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 estar rastreando esto.
¿Alguien puede ayudar?
Gracias Ben
Solución
Sí La entrada de referencia (propiedad de navegación) no rastrea los cambios. Es responsabilidad de la propiedad de la clave extranjera (en el caso de la asociación de clave extranjera) o los cambios separados de seguimiento de objetos de la asociación independiente. En ObjectContext API puede obtener estos objetos por ObjectStateManager
Pero parece que la API DBContext no tiene esto disponible. Hice una pregunta sobre esto en Foro de MSDN.