Asp.net-Mvc
NHibernate 記憶體問題 - 何時呼叫 Evict?
我遇到了一個明顯的記憶體問題,NHibernate 返回的內容與數據庫中的內容不匹配。
我相信這是二級記憶體數據。看起來我可以使用 Evict 來執行此操作,但實際上應該何時呼叫 Evict 方法? 對於我的特定應用程序,數據對於使用者來說將是唯一的,並且提供的數據可能只會使用一次*。
我可以完全禁用這些對象集的 Level2 記憶體嗎?
更新 10/31
我的場景是這樣的:我有一個購物車,客戶將在其中添加和刪除商品。我正在做的事情如下:在處理購物車的更新之前,我驅逐了
CartandCartProduct實體。完成此操作後,我從提供程序檢索列表CartProducts並返回視圖(這發生在 .NET MVC 控制器中)。更新 11/3
購物車已經完成,我遇到了一個似乎與同一個 NHibernate 問題有關的問題,但實際上是一個 MVC 問題。深入探勘發現 HTML Helper 擴展覆蓋了我假設的值並替換為 Model 狀態中的值。所以對這個是雙重打擊。希望這可以幫助某人。
不,您不能禁用某些實體的記憶體。
你有幾個選擇:
- 使用 ISession.Clear() 從 NHibernate 的記憶體中清除所有實體。
- 使用 ISession.Evict( obj ) 從記憶體中清除特定實體。
- 使用 ISessionFactory.Evict( typeof( obj ) ) 從記憶體中逐出特定類型的所有實體/對象。在我看來,這將是最接近您想要的。
- 使用 IStatelessSession 從數據庫中獲取對象/實體,因為這完全繞過了所有記憶體。