EF:EntityState 跟踪笔记 "virtual" 属性的工作原理

EF: how work EntityState tracking for not "virtual" propertys

如何跟踪未标记为 virtual 的属性的 EntityState?

此处示例:

var person = db.Persons.First();
person.Name = "bla bla";
Console.WriteLine(db.Entry(person).State);  //Output: Modified. How he know??

Class结构:

class Person
{
    public int id { get; set; }
    public string Name { get; set; }
)

这是因为自动更改跟踪默认启用。

public YourDbContext
{
  Configuration.AutoDetectChangesEnabled = true;
}

默认情况下,Entity Framework 会在所有实体从数据库加载时为其创建快照。当你需要将这些实体保存到数据库时,它会将所有实体的这个快照与它们当前的状态进行比较,然后它会根据这些entities.If你修改任何属性的状态更新数据库您从数据库加载的实体,然后调用 db.Entry 方法或 db.SaveChanges 方法,在内部它将首先调用 DetectChanges 方法来检测对属性和关系所做的更改那个实体。如果它检测到一些变化,那么它会将状态更改为 Modified

访问实体更改跟踪信息的最简单方法是在 DbContext 上使用 Entry 方法。 Entry returns 一个 DbEntityEntry 实例,它使您可以访问 entity.Once 可用的信息和操作,您可以访问 OriginalValuesCurrentValues 属性。都是DbPropertyValues.

类型