Obtenir toutes les clés et leurs valeurs de ObjectStateEntry dans Entity Framework
-
28-10-2019 - |
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
}
}
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