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 可用的信息和操作,您可以访问 OriginalValues
和 CurrentValues
属性。都是DbPropertyValues
.
类型
如何跟踪未标记为 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 可用的信息和操作,您可以访问 OriginalValues
和 CurrentValues
属性。都是DbPropertyValues
.