EntityFramework Change Tracking non rileva le modifiche

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

Domanda

Sto utilizzando Entity Framework 7 e devo essere in grado di tenere traccia delle modifiche. In definitiva, sto facendo qualcosa di simile durante il salvataggio su SaveChanges, lo sovrascrivo poi alla fine 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;
    }
}

Questo alla fine richiede di ottenere i record delle modifiche alle tabelle:

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;
    }
}

Ora il problema che sto affrontando è sia OriginalValue che CurrentValue e il nuovo valore inserito. Non sta monitorando il valore originale.

Ho:

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;
    }
}

Tuttavia, non riesco ancora a fornirmi il valore originale e attuale correttamente. Qualsiasi aiuto è molto apprezzato.

Risposta accettata

Così ho capito il mio problema ... il problema che stavo affrontando era che stavo allegando il record che necessitava di aggiornamento. Alla fine ho aggiornato il record creando la mia funzione di aggiornamento:

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;
    }



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché