如何改变实体框架跟踪作品(How change tracking works in Entity F

2019-06-24 01:46发布

考虑下面的代码,如何EF /的DbContext知道客户对象所做的更改:

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; }
}

谢谢

Answer 1:

当加载从它保持一个额外的数据结构的上下文中的实体 - 我们称之为项目。 该条目包含两个值的集合 - 原始值和当前值。 当您执行SaveChanges操作EF经过客户实体,使他们与你的实体的真实状态相匹配的表项更新,当前值-该操作被称为检测的变化 。 在SQL命令生成EF将比较当前和原始值,并建立一个SQL UPDATE语句修改数据库中的更改后的值。 这种操作称为快照更改跟踪 - EF保持在入门快照。

有一个叫动态变化的跟踪替代,这将在您指定的价值,你的实体的财产,同时进入修改当前值。 动态变化的跟踪有特殊要求(就像所有的实体的属性必须是virtual ),因为它必须在运行时包住类动态代理。 这曾经是首选的方式,但由于复杂的情况下一些性能问题,快照更改跟踪,目前应该是作为缺省值。



文章来源: How change tracking works in Entity Framework