更改跟踪和标识解析(实体框架)

ObjectQuery 将查询返回的新对象添加到由 ObjectStateManager 维护的对象缓存中。ObjectContext 上的 Attach 方法以及 EntityReferenceEntityCollection 上的 Load 方法也向对象缓存中添加对象。每个对象上下文都有一个 ObjectStateManager。在对象上下文内,可以独立于数据源中的数据添加、修改和删除对象。当单个对象上下文范围中的多个查询或加载操作返回包含重复值的对象集合时,对象服务在缓存中仅维护具有特定实体键的对象的一个实例。默认情况下,查询仅返回缓存中尚没有的对象,这表示不会重写缓存中已有的对象更改。此行为通过为查询和加载操作指定 MergeOption 值进行控制。默认值为 AppendOnly。默认行为仅加载对象缓存中尚没有的对象,意味着不会重写已有对象。阻止对象缓存中的更改被数据库中的更新重写的另一种方式是指定 PreserveChanges。这通常用于在保留本地上下文中的更改的同时解决开放式并发异常。有关更多信息,请参见保存更改和管理并发(实体框架)。指定 OverwriteChanges 时,缓存中的对象替换为已从数据库具体化的最新版本对象,即使这些对象已经更改也如此。

另请参见

其他资源

管理对象上下文(实体框架)