Ответ 1
Когда вы загружаете объект из контекста, он сохраняет дополнительную структуру данных - позвольте ему называть его. Запись содержит два набора значений - исходные значения и текущие значения. Когда вы выполняете операцию SaveChanges
, EF проходит через ваши объекты клиента и обновляет текущие значения в записи, чтобы они соответствовали реальному состоянию вашего объекта - эта операция называется обнаружением изменений. Во время генерации команды SQL EF будет сравнивать текущие и исходные значения и строить инструкцию обновления SQL для изменения измененных значений в базе данных. Эта операция называется отслеживанием изменений моментальных снимков. EF сохраняет записочную запись в записи.
Существует альтернатива, называемая отслеживанием динамических изменений, которая будет изменять текущее значение в записи, одновременно присваивая значение свойству entity. Динамическое отслеживание изменений имеет особые требования (например, все ваши свойства в сущности должны быть virtual
), потому что он должен обернуть ваш класс динамическому прокси во время выполнения. Это было предпочтительным способом, но из-за некоторых проблем с производительностью в сложных сценариях отслеживание изменений моментальных снимков в настоящее время предполагается использовать по умолчанию.