NHibernate如何实现变更跟踪?

时间:2010-05-28 07:40:46

标签: nhibernate

nhibernate代理是否可以执行任何智能工作以使更改跟踪更有效?或者它是否仅支持实体框架基于快照的更改跟踪?

2 个答案:

答案 0 :(得分:12)

它是基于快照的。

加载实体时,其状态作为对象[]存储在会话中。

当刷新时,当前状态将转换为对象[]并与原始状态进行比较,以确定哪些属性是脏的。

出于多种原因,效率更高。其中之一是您不需要代理来跟踪更改。另一个是,如果将属性设置为不同的值然后将其还原,则该实体将被视为非脏,从而避免不必要的数据库调用。

答案 1 :(得分:9)

NHibernate和EntityFramework以非常不同的方式跟踪变化。实体框架跟踪实体本身的变化。 NHibernate跟踪会话中的变化。

跟踪实体中的更改需要更多内存(因为您要存储之前的值以及之后的值)。即使在断开与ObjectContext的连接后,实体也可以保留更改跟踪。

总体而言,跟踪会话中的更改效率更高,但如果您断开实体与会话的连接,则会丢失更改跟踪。