2012-03-06 103 views
0

我使用(流利)nhibernate,我遇到了一個小問題。我的數據模型是有一個用戶對象與一個到另一個對象的一對多鏈接(我將它稱爲Obj1)。 Obj1有一個在我的應用程序外部的主鍵。雖然我可以將其更改爲擁有自己的主鍵並因此允許重複,但會在稍後導致更多問題。Nhibernate數據對象有對象添加,刪除,然後添加

用戶可以隨時在他們的個人資料中添加和刪除Obj1,並在執行每個操作時立即調用數據層。問題是,如果用戶添加一個Obj1,刪除它,然後再添加它,那麼nhibernate會給我一個NonUniqueObjectException。

這是因爲添加的第一個Obj1似乎仍然處於nhibernate會話中。似乎有幾種解決方案:

  1. 清除會話並在發生更新時重新加載用戶obj。
  2. 從這裏開始:nhibernate : a different object with the same identifier value was already associated with the session: 2, of entity: - 在每次更新後,從會話緩存中逐出用戶對象。
  3. 重寫允許用戶管理Obj1的屏幕,以便它只在離開屏幕時調用數據層。

1和2更容易,但兩者都顯得有些黑客。 3似乎是「正確」的解決方案,但意味着我可能在稍後更難解決的領域遇到同樣的問題。

所以問題是,哪個最好,爲什麼?由於某些原因,這些解決方案是否真的很糟糕? (例如,嘗試對nhibernate緩存進行微操縱看起來對我來說似乎是一個不好的主意。)

注意:奇怪的是,通過編寫這個我從完全不確定到完全相信3是最好的方法走。我仍然有興趣聽到其他觀點。

回答

0

我在存儲庫中添加了一個單元測試來重現這個問題,令我驚訝的是,它工作正常。 幾分鐘後,我發現真正的問題 - 我沒有堅持刪除Obj1到數據層。一旦我這樣做,一切運作良好。

哦,至少它爲我節省了很多工作。