Получение всех ключей и их значений из ObjectStateEntry в Entity Framework - PullRequest
3 голосов
/ 16 января 2012

Для целей ведения журнала аудита я переопределяю метод SaveChanges() в подходе EF 4.1 Database-First.

У меня есть весь объект ObjectStateEntry, и мне интересно, смогу ли я получить все ключи и их значения из каждого ObjectStateEntry.

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

Ответы [ 2 ]

7 голосов
/ 16 января 2012

Я не проверял, но что-то вроде этого должно работать:

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;
}
3 голосов
/ 16 января 2012

Попробуйте использовать ObjectStateEntry.EntityKey и EntityKey.EntityKeyValues:

var keyValues = stateEntityEntry.EntityKey.EntityKeyValues;

, который возвращает массив EntityKeyMember .Затем вы можете использовать свойства Key и Value, которые возвращают string и object соответственно.

...