4
我遇到了一個明顯的緩存問題,即NHibernate返回的內容與數據庫中的內容不匹配。NHibernate緩存問題 - 何時調用Evict?
我相信這是level2緩存數據。它看起來像我可以使用Evict來做到這一點,但實際上應該調用Evict方法嗎?對於我的特殊應用,數據對用戶來說是唯一的,而且提供的數據可能只會被使用一次*。
我可以完全禁用這些對象集的Level2緩存嗎?
UPDATE 10/31
我的情況是這樣的:我有凡客將是添加和刪除項目的購物車。我正在做的事情如下:在處理購物車更新之前,我驅逐了Cart
和CartProduct
實體。完成此操作後,我從提供程序中檢索CartProducts
列表,並返回視圖(這發生在.NET MVC控制器中)。
UPDATE 11/3
的購物車已經被完成了,我跑進那似乎是與同一NHibernate的問題的問題,但實際上是一個MVC的問題。深入挖掘表明,HTML Helper擴展覆蓋了我認爲的值,並取而代之的是處於Model狀態的內容。所以在這一個雙重打擊。希望這可以幫助某人。
蘭迪,感謝您的鏈接。你能詳細闡述一下evit的正確用法嗎?我在上面對我的實際使用做了一些說明,但這似乎是完全錯誤的做法。在對數據庫做任何事之前,必須先給Evict打電話是很荒謬的。使用MySQL FWIW。 – Brian
Evict()從NHibernate會話中刪除/解除關聯對象。它的用途是當你不希望一個對象持久/保存回數據庫時。例如,您可以從數據庫中加載現有的購物車,Evict()購物車實體,並在會話中保存購物車實體。然後,當用戶到達購物車的末尾時,可以將其保存回數據庫。這個例子可以讓你的購物車在每次換頁時不必從數據庫中重新加載。這是一個有點人爲的例子,但聽起來很合理。 –
關於你的第二條評論和你的問題的更新,是的,它看起來似乎沒有正確設置,因爲你不應該真的需要爲你的用例從會話中抽取對象。不幸的是,在我們能夠縮小真正的問題之前,我需要了解您的應用程序。有些事情需要研究,確保你沒有使用與你的視圖模型相同的實體,確保你正在使用事務,確保在處理你的NHibernate會話之前正確地提交你的事務。 –