NHibernate如何实现变更跟踪?

Ali*_*ice 11 nhibernate

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

Die*_*hon 16

它是基于快照的.

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

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

由于许多原因,这更有效.其中之一是您不需要代理来跟踪更改.另一个是,如果将属性设置为不同的值然后将其还原,则该实体将被视为非脏,从而避免不必要的DB调用.

  • @AmitJoshi它确实支持它;这不是默认行为。您需要在实体映射中设置“ dynamic-update =“ true”`。 (2认同)

Mic*_*dox 10

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

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

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

  • 这个说法正确吗?据我所知,EF 使用所谓的更改跟踪器来跟踪实体更改。实体中不包含任何变更跟踪基础设施。 (3认同)