我想知道是否有辦法讓一個實體的實例在運行時不可變。我知道我可以有隻讀類型,但是我希望在運行時只讀類型的實例。原因是,我希望通過修改屬性來使用NH域對象(如輕量級實體),但不希望在執行Session.Flush()或類似操作時保留這些更改。總是存在Session.Evict(),但這不會阻止來自Session.Save()的未知開發人員在「只讀」實體上工作。NHibernate只讀實體在運行時
3
A
回答
5
在運行時間吧?我還是有點不解帶,究竟你問,但我已經做了這樣的事情在過去的:
foreach (var order in orders)
{
_nhSession.SetReadOnly(order, true); //prevent database updates
}
我這樣做了一段時間後,因爲當我查詢訂單的名單,一些實體的財產不應當爲空。因此,當NHibernate做了flush操作時,它試圖更新我的所有命令,並將數據庫中爲空的幾個字段設置爲默認的C#值,例如數據庫中的Integer字段設置爲NULL,在C#中將更改爲0 。
1
看看this article by Fabio Maulo,你可以用它作爲起點,並改變它來跟蹤個體實體。
+0
這是一個有趣的事情要考慮。我們不能在我們的解決方案中使用這個功能,並在現有刷新行爲上使用遺留依賴關係然而,我喜歡看鉤子在哪裏進入實例狀態,這可能會激發我爲NH爲GetReadOnly或ListReadOnly <>或類似的東西添加重載。 – Trent
相關問題
- 1. 在運行時緩存Nhibernate實體
- 2. 使實體類行只讀在JPA
- 3. 關於實體框架,在運行時
- 4. 在運行時配置實體
- 5. 實體框架:在運行時添加屬性/實體
- 6. 如何在實體框架中創建只讀實體?
- 7. 在NHibernate中克隆實體?
- 8. 如何使用實體框架時,實體/屬性只會在運行時知道的?
- 9. NHibernate實體投影
- 10. NHibernate實體映射
- 11. 只讀加入收藏NHibernate
- 12. nhibernate只讀頭數據
- 13. NHibernate只讀會話池?
- 14. 嘗試運行查詢實體時,我有一口流利的繼承Nhibernate
- 15. 在運行時擴展/修改NHibernate類
- 16. 在運行時擴展NHibernate查詢
- 17. nHibernate eager在運行時加載
- 18. 在運行時設置NHibernate數據庫
- 19. 如何在NHibernate實體中實現LastUpdate?
- 20. 加載實體時nhibernate競爭條件
- 21. 運行時實體框架異常:參與關係的實體?
- 22. 在只讀Docker容器中運行python
- 23. 只讀在WPF RichTextBox中運行元素?
- 24. Symfony - 從YAML水合的只讀實體
- 25. Spring Data Rest使實體只讀默認
- 26. 組成問題:實體當前只讀
- 27. 如何創建只讀實體?
- 28. 實體框架 - 使其只讀嗎?
- 29. 休眠只讀會話 - 更新實體
- 30. JPA:拆下連接只讀實體
我有2個問題: 1.爲什麼以及何時需要實體的只讀版本? 2.「運行時間」何時開始? – Paco
「爲什麼」 - 因爲在某些情況下,我們希望在內存中保留一個對象的狀態而不需要堅持數據庫。大多數純粹主義者會爭辯說,你創建了一個單獨的輕量級實體,但在簡單情況下,我認爲這不太實用。我不喜歡NH的一件事是沖洗自動持續改變狀態,這是一個陳述的設計原則。我*喜歡*使用明確的陳述來堅持我的對象,這就是爲什麼我被Mauricio Scheffer的答覆所吸引。 「你什麼時候需要readonly版本的實體......何時'runtime'開始?」 - 加載後 – Trent