2016-06-07 46 views
0

我想創建一個持久對象圖的克隆,它似乎像Session.Evict(PersistedObject)是這樣做的方式。通過從Session緩存中刪除實例,我可以將其設置爲新的「克隆」記錄。必須Nhibernate Session.Evict()作用於代理對象嗎? (或者是有克隆持久對象圖的替代方法?)

我嘗試了三種方法,每種方法都不成功。

  1. 使用急切加載從數據庫中獲取我的對象圖並嘗試將其退出。這會導致KeyNotFoundException異常
  2. 使用Session.Load(objectId)並嘗試將其驅逐出去。 Evict的作品,但我只有一個代理工作,而不是我需要的水合物體
  3. 使用Session.Get(objectId)並嘗試將它驅除。這導致KeyNotFoundException

我一直在努力尋找關於此主題的任何真實文檔或示例。我發現了一些接近,但沒有真正解釋了我要去哪裏錯了

隨着關於最後一個鏈接,我檢查了我的Equals和GetHashC ode方法,但在調用Evict時不會受到影響。另外,Session.Contains(objectToBeEvicted)在Evict之前返回true()

至於標題中的第二個問題 - 是否有更好的方法來解決這個問題?這不可能是這樣一個難得的場景

在此先感謝

回答

0

要回答最初的問題:

不,Evict()不限於作用於代理,它可以從會議中刪除任何對象。如果你遇到某種異常,很可能你做錯了什麼,但是這個問題沒有包含足夠的信息來弄清楚什麼。

+0

謝謝 - 我認爲它沒有任何意義,它只能作用於代理。爲了獲得我想要驅逐的對象,我正在使用QueryOver查詢並急切地加載子集合。所以我想要Evict的對象是一個完整的對象圖。還有什麼我會省略的,可以幫助你理解場景? –