nhibernate代理是否可以执行任何智能工作以使更改跟踪更有效?或者它是否仅支持实体框架基于快照的变更跟踪?
Die*_*hon 16
它是基于快照的.
加载实体时,其状态作为对象[]存储在会话中.
刷新时,将当前状态转换为对象[]并与原始状态进行比较,以确定哪些属性是脏的.
由于许多原因,这更有效.其中之一是您不需要代理来跟踪更改.另一个是,如果将属性设置为不同的值然后将其还原,则该实体将被视为非脏,从而避免不必要的DB调用.
Mic*_*dox 10
NHibernate和EntityFramework以非常不同的方式跟踪变化.实体框架跟踪实体本身的变化.NHibernate跟踪会话中的更改.
跟踪实体中的更改需要更多内存(因为您要存储之前的值以及之后的值).即使在断开与ObjectContext的连接后,实体也可以保留更改跟踪.
总体而言,跟踪会话中的更改效率更高,但如果断开实体与会话的连接,则会丢失更改跟踪.