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

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

<code>class Program
{
    static void Main()
    {
        using(var shopContext = new ShopContext())
        {
            var customer = shopContext.Customers.Find(7);

            customer.City = "Marion";

            customer.State = "Indiana";

            shopContext.SaveChanges();
        }
    }
}

public class ShopContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}
</code>

Спасиб

Ответы на вопрос(1)

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

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

ВАШ ОТВЕТ НА ВОПРОС