Abrufen aller Schlüssel und ihrer Werte von ObjectStateEntry in Entity Framework
-
28-10-2019 - |
Frage
Für die Überwachungsprotokollierung überschreibe ich die SaveChanges()
-Methode in EF 4.1 Database-First.
Ich habe alle ObjectStateEntry-Objekte und frage mich, ob ich alle Schlüssel und ihre Werte von jedem ObjectStateEntry erhalten könnte.
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
}
}
Lösung
Ich habe es nicht getestet, aber so etwas sollte funktionieren:
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;
}
Andere Tipps
Verwenden Sie ObjectStateEntry.EntityKey
und EntityKey.EntityKeyValues
:
var keyValues = stateEntityEntry.EntityKey.EntityKeyValues;
, das ein Array von EntityKeyMember zurückgibt.Sie können dann die Eigenschaften Key
und Value
verwenden, die einen string
bzw. einen object
zurückgeben.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow