سؤال

لغرض تسجيل التدقيق أتجاوز SaveChanges() الطريقة في EF 4.1 النهج الأول لقاعدة البيانات.

لدي كل كائن 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
        }
    }
هل كانت مفيدة؟

المحلول

لم أختبره ولكن شيئًا مثل هذا يجب أن يعمل:

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

نصائح أخرى

جرب استخدام ObjectStateEntry.EntityKey و EntityKey.EntityKeyValues:

var keyValues = stateEntityEntry.EntityKey.EntityKeyValues;

الذي يقوم بإرجاع مجموعة من EntityKeyMember.يمكنك بعد ذلك استخدام Key و Value الخصائص، والتي ترجع أ string و object على التوالى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top