从Entity Framework中的ObjectStateEntry获取所有键及其值

时间:2012-01-16 06:23:26

标签: c# entity-framework entity-framework-4.1 audit ef-database-first

对于审计日志记录目的,我在EF 4.1 Database-First方法中覆盖SaveChanges()方法。

我有所有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 个答案:

答案 0 :(得分:7)

我没有测试过,但是这样的事情应该有效:

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

答案 1 :(得分:3)

尝试使用ObjectStateEntry.EntityKeyEntityKey.EntityKeyValues

var keyValues = stateEntityEntry.EntityKey.EntityKeyValues;

返回EntityKeyMember的数组。然后,您可以使用KeyValue属性,这些属性分别返回stringobject