Entity Framework Core обновляет неизмененные поля - PullRequest
0 голосов
/ 15 мая 2018

Я не уверен, что это вопрос о Entity Framework или о том, как работает библиотека audit.net, но я догадался, что это связано с тем, как я выполнял обновления с EF. Моя цель - зафиксировать только реальные изменения в записи, но она фиксирует все как изменения, даже если старые и новые значения идентичны.

В основном, чтобы максимально упростить это, если я сделаю

var existing = context.Appl.FirstOrDefault(a => a.Id == id);
context.Appl.Update(existing);
context.SaveChanges();

(ничего не меняя)

Журнал изменений Audit.Net сообщает, что каждое отдельное поле было изменено, и выглядит как

   "Changes": [
      {
        "ColumnName": "FOO",
        "OriginalValue": "",
        "NewValue": ""
      },
      ..... many more

1 Ответ

0 голосов
/ 15 мая 2018

Моя цель - зафиксировать только реальные изменения в записи

Тогда вам не следует использовать метод Update.

В соответствии с методом Update, документация :

Начинает отслеживать заданный объект в состоянии Modified, так что он будет обновляться в базе данных.когда SaveChanges() называется.

Все свойства объекта будут помечены как измененные .Чтобы пометить только некоторые свойства как измененные, используйте Attach(Object), чтобы начать отслеживать сущность в неизмененном состоянии, а затем используйте возвращенный EntityEntry, чтобы пометить нужные свойства как измененные.

Основным вариантом использования метода Update является выполнение так называемого принудительного обновления при работе с Disconnected Entities .Поскольку ваша сущность existing извлекается из контекста (или, другими словами, отслеживается контекстом), следовательно, все, что вам нужно, это установить новые значения.Система отслеживания изменений обнаружит, есть ли фактические изменения свойств, и выдаст команду UPDATE с только измененными значениями (или вообще без команды UPDATE, если все текущие значения равны исходным значениям).

...