Question

À des fins de journalisation d'audit, je remplace SaveChanges() Méthode dans l'approche EF 4.1 Database First.

J'ai tout objet objetStateEntry et je me demande si je pouvais obtenir toutes les clés et leurs valeurs de chaque objetStateEntry.

   IEnumerable<ObjectStateEntry> changes = this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified);
    foreach (ObjectStateEntry stateEntryEntity in changes)
    {
        if (!stateEntryEntity.IsRelationship &&
                stateEntryEntity.Entity != null &&
                    !(stateEntryEntity.Entity is DBAudit))
        {
          list<object , object> KeyValues = GetAllKeyValues(stateEntryEntity );
          //Do log all keyvalues
        }
    }
Était-ce utile?

La solution

Je ne l'ai pas testé mais quelque chose comme ça devrait fonctionner:

private Dictionary<string, object> GetAllKeyValues(ObjectStateEntry entry)
{
    var keyValues = new Dictionary<string, object>();
    var currentValues = entry.CurrentValues;
    for (int i = 0; i < currentValues.FieldCount; i++)
    {
        keyValues.Add(currentValues.GetName(i), currentValues.GetValue(i));
    }
    return keyValues;
}

Autres conseils

Essayer d'utiliser ObjectStateEntry.EntityKey et EntityKey.EntityKeyValues:

var keyValues = stateEntityEntry.EntityKey.EntityKeyValues;

qui renvoie un tableau de Entitykeymember. Vous pouvez ensuite utiliser le Key et Value propriétés, qui renvoient un string et object respectivement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top