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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top