ObjectStateManager和Detached实体状态

时间:2011-11-14 12:07:18

标签: entity-framework entity-framework-4 wcf-ria-services submitchanges objectstatemanager

我正在使用Entity Framework,但我的部分功能仍然不清楚。难以理解的主要内容是:

  • SubmitChanges进程;
  • 调用update-delete-insert方法的顺序;
  • 了解ObjectStateManager
  • 分离EntityState,它参与提交过程;

提供您的解释或提供一些有用的链接。

1 个答案:

答案 0 :(得分:3)

ObjectStateManager是一个公开有关被跟踪实体的信息的组件。必须跟踪每个可由EF持久化的实体=附加。 EF未知分离的实体(它们未被跟踪),因此当您调用SaveChanges(EF中没有SubmitChanges)时,不会保存其更改。跟踪包括维护有关实体或关系的初始状态的信息以及对它们所做的更改。它还包含实体的全局状态。

调用SaveChanges时的过程取决于您如何配置EF以跟踪更改,获取实体的方式以及您所做的更改。

更改跟踪功能允许EF跟踪应用于附加到上下文的实体的更改(默认情况下附加查询加载的每个实体)。 EF包含更改跟踪版本:

  • 快照 - 仅适用于POCO。 EF不跟踪对实体的更改,但是当您调用SaveChanges时,它会比较实体的存储状态(在加载实体时获得)和实体中的当前数据并相应地设置其状态。
  • 动态 - 基于EntityObject的实体的原生,并由POCO的动态代理实现。对附加实体的每次更改都会触发跟踪条目的更改并相应地设置实体状态。当您致电SaveChanges时,状态已经设置完毕。

数据修改操作的顺序是EF内部实现。基本顺序由您的映射定义,其中描述了实体之间的依赖关系。