Когда EF извлекает объект из базы данных, он делает снимок исходных значений для всех свойств этого объекта. Позже, когда будут внесены изменения в значения этих свойств, исходные значения останутся такими же, пока текущие значения изменятся.
Однако, чтобы это произошло, EF должен отслеживать объект на протяжении всего процесса. В веб-приложении или другом n-уровневом приложении обычно значения отправляются клиенту, и контекст, используемый для запроса объекта, удаляется. Это означает, что объект больше не отслеживается EF. Это хорошая и хорошая практика.
Как только приложение отправляет обратно, сущность реконструируется с использованием значений из клиента, а затем повторно присоединяется к контексту и устанавливается в состояние Modified . Однако по умолчанию единственными значениями, которые возвращаются от клиента, являются текущие значения. Исходные значения теряются. Обычно это не имеет значения, если вы не выполняете оптимистичный параллелизм или не хотите быть очень осторожным в обновлении только тех значений, которые действительно изменились. В этих случаях исходные значения также следует отправлять клиенту (обычно в виде скрытых полей в веб-приложении), а затем повторно применять в качестве исходных значений как часть процесса присоединения. В приведенном выше примере этого не произошло, и поэтому исходные значения не отображались должным образом.