nhibernate代理是否做任何聰明的工作來使更改跟蹤高效?還是它只支持實體框架調用基於快照的變更跟蹤?NHibernate如何實現更改跟蹤?
10
A
回答
12
這是基於快照的。
加載實體時,其狀態作爲對象[]存儲在會話中。
當沖洗時,當前狀態轉換爲對象[]並與原始狀態進行比較以確定哪些屬性是髒的。
由於多種原因,這樣更有效率。其中之一是你不需要需要代理來跟蹤更改。另一個原因是,如果您將一個屬性設置爲不同的值並將其恢復,則該實體將被視爲非髒,從而避免不必要的數據庫調用。
9
NHibernate和EntityFramework跟蹤以非常不同的方式進行更改。實體框架跟蹤實體本身的變化。 NHibernate跟蹤會話中的更改。
實體中的跟蹤更改需要更多的內存(因爲您正在存儲之前的值以及之後的值)。即使從ObjectContext斷開連接,實體也可以保留更改跟蹤。
跟蹤會話中的更改總體來說效率更高,但是如果您從會話中斷開實體,則會丟失更改跟蹤。
+0
這句話是正確的嗎?據我所知,EF使用所謂的變化追蹤器來追蹤實體變化。實體中不包含更改跟蹤基礎結構。 – Andreas 2016-02-29 08:03:13
相關問題
- 1. NHibernate屬性更改跟蹤
- 2. Nhibernate沒有跟蹤更改
- 3. 在TFS 2012中實現更改跟蹤
- 4. 如何實現對象修改跟蹤
- 5. 跟蹤更改
- 6. 跟蹤更改
- 7. 跟蹤更改
- 8. 跟蹤更改
- 9. NHibernate如何跟蹤對實體中的字段所做的更改?
- 10. LINQ跟蹤更改
- 11. 如何實現一個跟蹤欄
- 12. 如何實現的Marketo跟蹤代碼
- 13. 如何實現NSLog跟蹤CGPoint座標
- 14. 現有表的日期跟蹤更改
- 15. 實體框架5跟蹤更改
- 16. 跟蹤更改到一個Drupal實體
- 17. 跟蹤實例屬性更改
- 18. 實施每個屬性更改跟蹤
- 19. 如何跟蹤查詢的原因/堆棧跟蹤NHibernate的
- 20. 實體框架如何跟蹤更新?
- 21. 如何跟蹤對PageCollectionView的更改SortDescriptions
- 22. 如何跟蹤一列中的更改?
- 23. GNU如何跟蹤文件更改?
- 24. 如何跟蹤對象圖的更改?
- 25. SQLAlchemy如何跟蹤數據庫更改?
- 26. 如何定期跟蹤網絡更改
- 27. 如何跟蹤文件上的更改?
- 28. 如何跟蹤數據庫更改?
- 29. 如何跟蹤Bundler API更改?
- 30. Dapper.Contrib - 如何獲取更改跟蹤值?
您是否在談論審計日誌記錄,其中記錄了更改,還是全面變更管理以及恢復到早期版本的實體的能力? – DanK 2010-05-28 08:02:26
如果實體具有多個屬性,則ORM應該僅使用更改的屬性向數據庫發出更新語句。在LINQ TO SQL中,它通過INotifyPorpertyChanging/Changed接口知道屬性是否已更改(儘管它不是必需的,在這種情況下,它會回退到基於快照的更改跟蹤,即它比較每個屬性以找出哪些屬性已更改)。 – Alice 2010-05-28 15:33:12