Я пытаюсь переопределить метод Entity Framework SaveChanges()
, чтобы сохранить информацию аудита. Я начинаю со следующим:EF ObjectStateEntry OriginalValues содержит CurrentValues
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
ObjectContext ctx = ((IObjectContextAdapter)this).ObjectContext;
List<ObjectStateEntry> objectStateEntryList = ctx.ObjectStateManager.GetObjectStateEntries(
EntityState.Added
| EntityState.Modified
| EntityState.Deleted).ToList();
foreach (ObjectStateEntry entry in objectStateEntryList)
{
if (!entry.IsRelationship)
{
//Code that checks and records which entity (table) is being worked with
...
foreach (string propertyName in entry.GetModifiedProperties())
{
DbDataRecord original = entry.OriginalValues;
string oldValue = original.GetValue(original.GetOrdinal(propertyName)).ToString();
CurrentValueRecord current = entry.CurrentValues;
string newValue = current.GetValue(current.GetOrdinal(propertyName)).ToString();
if (oldValue != newValue)
{
AuditEntityField field = new AuditEntityField
{
FieldName = propertyName,
OldValue = oldValue,
NewValue = newValue,
Timestamp = auditEntity.Timestamp
};
auditEntity.AuditEntityField.Add(field);
}
}
}
}
}
Проблема у меня в том, что значения я получаю в entry.OriginalValues
и в entry.CurrentValues
всегда новое обновленное значение:
с той же проблемой, но разве это ошибка? не могли бы предположить, что нам придется сначала проверить каждое свойство и решить, если мы сохраним или нет.?! :/ – mxii
В первом методе EF ничего не знает об исходной стоимости объекта. Кажется, это логично, если исходные значения такие же, как и текущее значение. Проверьте http://stackoverflow.com/questions/9588352/entity-framework-dbcontext-savechanges-originalvalue-incorrect –