我使用(流利)nhibernate,我遇到了一個小問題。我的數據模型是有一個用戶對象與一個到另一個對象的一對多鏈接(我將它稱爲Obj1)。 Obj1有一個在我的應用程序外部的主鍵。雖然我可以將其更改爲擁有自己的主鍵並因此允許重複,但會在稍後導致更多問題。Nhibernate數據對象有對象添加,刪除,然後添加
用戶可以隨時在他們的個人資料中添加和刪除Obj1,並在執行每個操作時立即調用數據層。問題是,如果用戶添加一個Obj1,刪除它,然後再添加它,那麼nhibernate會給我一個NonUniqueObjectException。
這是因爲添加的第一個Obj1似乎仍然處於nhibernate會話中。似乎有幾種解決方案:
- 清除會話並在發生更新時重新加載用戶obj。
- 從這裏開始:nhibernate : a different object with the same identifier value was already associated with the session: 2, of entity: - 在每次更新後,從會話緩存中逐出用戶對象。
- 重寫允許用戶管理Obj1的屏幕,以便它只在離開屏幕時調用數據層。
1和2更容易,但兩者都顯得有些黑客。 3似乎是「正確」的解決方案,但意味着我可能在稍後更難解決的領域遇到同樣的問題。
所以問題是,哪個最好,爲什麼?由於某些原因,這些解決方案是否真的很糟糕? (例如,嘗試對nhibernate緩存進行微操縱看起來對我來說似乎是一個不好的主意。)
注意:奇怪的是,通過編寫這個我從完全不確定到完全相信3是最好的方法走。我仍然有興趣聽到其他觀點。