Я думаю, что вижу проблему с вашим кодом. В вашем контроллере:
//map all the properties and commit
var entity = mapper.Map<Item>(transactionItemDto);
var updatedItem = repository.Update(entity);
repository.Commit();
В этом коде вы берете DTO и отображаете его на новый экземпляр Item. Этот новый экземпляр Item не знает ничто текущих значений базы данных, поэтому вы видите одинаковые новые значения как для OriginalValue, так и для CurrentValue.
Если вы повторно используете переменную Item Item, полученную в этой строке:
Item item = repository.GetSingle(transactionItemDto.Id); //find entity first
Обратите внимание, что вам потребуется получить объект с отслеживанием, в отличие от того, как это делает ваш репозиторий GetSingleэто с AsNoTracking. Если вы используете этот элемент (который теперь имеет исходные / текущие значения базы данных) и сопоставляете свои свойстваactionItemDto с ним следующим образом:
var entityToUpdate = mapper.Map<ItemDto, Item>(transactionItemDto);
Затем, когда вы вызываете свой метод repository.Update, передавая ему entityToUpdate, яверю, что вы увидите правильные значения до / после.
. ,,.
Старый ( неправильный ) ответ, который я первоначально разместил: В вашем коде ApplicationContext у вас есть следующий цикл
foreach (var prop in change.OriginalValues.Properties)
Я считаю, что именно это и является причиной вашего первоначального значения/ текущие значения должны быть одинаковыми, потому что вы перебираете свойства исходных значений. Попробуйте изменить этот цикл на:
foreach (var prop in change.Properties)
Затем попробуйте прочитать значения каждого свойства с помощью переменной prop следующим образом:
var currentValue = prop.CurrentValue;
var originalValue = prop.OriginalValue;
РЕДАКТИРОВАТЬ: Ах - теперь я вижу, что в вашемкод, который вы пытаетесь прочитать исходное значение из коллекции change.OriginalValues, поэтому я не думаю, что это поможет.