我正在使用实体框架,它的一些功能对我来说仍然不清楚。难以理解的主要内容是:
-
SubmitChanges
进程; - 调用update-delete-insert方法的顺序;
- 对
ObjectStateManager
的理解 - 分离
EntityState
,它是提交过程的一部分;
提供你的解释或提供一些有用的链接。
ObjectStateManager
是一个公开被跟踪实体信息的组件。每个可以被EF持久化的实体都必须被跟踪=附加。分离实体对于EF来说是未知的(它们没有被跟踪),因此当您调用SaveChanges
时,它们的更改不会被保存(EF中没有SubmitChanges
)。跟踪包括维护关于实体或关系的初始状态以及对它们所做的更改的信息。它还包含实体的全局状态。
调用SaveChanges的过程取决于您如何配置EF来跟踪更改,如何获得实体以及您所做的更改。
变更跟踪是一个允许EF跟踪附加到上下文的实体上应用的变更的特性(查询加载的每个实体在默认情况下都是附加的)。EF包含到版本的变更跟踪:
- 快照-仅用于poco。EF不跟踪实体的变化,但当你调用
SaveChanges
时,它会比较实体的存储状态(在实体加载时获得)和实体中的当前数据,并相应地设置其状态。 - 动态-原生的基于EntityObject的实体,并通过poco的动态代理实现。对附加实体的每次更改都会触发跟踪条目中的更改,并相应地设置实体状态。当您调用
SaveChanges
时,状态已经设置好了。
数据修改操作顺序为EF内部实现。基本顺序由描述实体之间依赖关系的映射定义。