EntityFramework Change Tracking no rastrea cambios

asp.net-core c# entity-framework entity-framework-core

Pregunta

Estoy utilizando Entity Framework 7 y necesito poder hacer un seguimiento de los cambios. En última instancia, estoy haciendo algo como esto durante los cambios en SaveChanges. Lo estoy anulando luego al final usando base.SaveChanges ():

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

En última instancia, esto llama a obtener registros de cambio de tabla:

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

Ahora, el problema que estoy enfrentando es tanto OriginalValue como CurrentValue y el nuevo valor que se ingresó. No está siguiendo cuál era el valor original.

Yo tengo:

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

Sin embargo, todavía no lo consigo para proporcionarme el valor original y actual correctamente. Cualquier ayuda es muy apreciada.

Respuesta aceptada

Así que resolví mi propio problema ... el problema al que me enfrentaba era que estaba adjuntando el registro que necesitaba actualización. Finalmente, actualicé el registro creando mi función de actualización:

public T ADMSUpdate<T>(T entity, T originalEntity)
    {
        object propertyValue = null;
        PropertyInfo[] properties = originalEntity.GetType().GetProperties();
        foreach (PropertyInfo property in properties)
        {
            propertyValue = null;
            if (null != property.GetSetMethod())
            {
                PropertyInfo entityProperty = entity.GetType().GetProperty(property.Name);
                propertyValue = entity.GetType().GetProperty(property.Name).GetValue(entity, null);

                if (null != propertyValue)
                {
                    property.SetValue(originalEntity, propertyValue, null);
                }
            }
        }
        return entity;
    }



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué