Как работает отслеживание изменений в Entity Framework

учитывая следующий код, как EF / DbContext знает об изменении, внесенном в клиент

1 ответов


при загрузке сущности из контекста она сохраняет дополнительную структуру данных-назовем ее записью. Запись содержит два набора значений - исходные значения и текущие значения. При выполнении SaveChanges операция EF проходит через ваши сущности клиента и обновляет текущие значения в записи, чтобы они соответствовали реальному состоянию вашей сущности - эта операция называется обнаружение изменений. Во время генерации команды SQL EF будет сравнивать текущие и исходные значения и создайте инструкцию SQL update для изменения измененных значений в базе данных. Эта операция называется снимок отслеживание изменений - EF держит снимок в записи.

существует альтернатива под названием динамическое отслеживание изменений который изменит текущее значение в записи одновременно с присвоением значения свойству вашей сущности. Динамическое отслеживание изменений имеет определенные требования (например, все ваши свойства в сущности должны быть virtual) потому что он должен обернуть ваш класс динамическим прокси-сервером во время выполнения. Раньше это было предпочтительным способом, но из-за некоторых проблем с производительностью в сложных сценариях отслеживание изменений моментальных снимков в настоящее время должно использоваться по умолчанию.