2011-03-24 55 views
1

有我的ASP.NET MVC2項目的問題。我使用流利的NHibernate作爲ORM,我非常喜歡它。我有的問題是緩存(我認爲)。例如,我有一個JQuery DataTable,通過控制器從數據庫獲取數據。 DataTable列出了與數據庫不同的東西,如果我刪除或添加一些文章,數據doesent似乎更新,即使調用正在進行,NHibernate做它應該做的(我認爲)。流利NHibernate的asp.net MVC緩存

數據只會更新,因爲它應該如果我重新運行項目(本地編程),但有時甚至是doesent工作。

緩存問題?它是NHibernate的緩存或瀏覽器?

+0

你只在IE中看到這個嗎?例如,在Firefox/Chrome中嘗試。 IE非常積極地緩存Ajax請求。在添加帖子之後,您是否可以檢查數據庫並查看數據是否已更新。 – Swaff 2011-03-24 12:09:47

+0

我看到它在鉻和FF。問題是我正在通過直接向數據庫添加一篇文章來測試,而不是通過應用程序。所以數據庫正確更新。 – 2011-03-24 12:27:46

+0

您需要通過應用程序來完成,以允許nHibernate查看數據,否則數據不可用於nHibernate。您將不得不清除()緩存以強制nHibernate返回到數據庫。 – Swaff 2011-03-24 12:30:23

回答

2

如果在數據庫更新數據而不是通過應用程序更新數據,nHibernate將不會知道數據,並且當再次查詢List()時,或者Load()不會返回到數據庫以獲取完整數據集。這裏

建議是:

  • 對於該測試通過 在數據庫中創建 把數據的一些手段NHibernate的
  • 或者同時在測試 階段,有 被調用的服務方法通過jQuery每次清除 緩存,從而迫使 nHibernate回到數據庫,每個請求使用 。

這可以完全使用ISession.Clear()完成,也可以使用Evict()將已知對象逐出。

不是真的是上線選項,不過因爲有nHibernate緩存數據是有好處的。

+0

如果我有其他應用程序更新數據庫,該怎麼辦?如果是的話,NHibernate不會知道它。唯一的解決辦法是清除緩存? – 2011-03-24 13:15:30

+0

當然,或者讓你的nHibernate會話只持續HTTP請求的持續時間,以便[每個請求](http://ryanlanciaux.com/ryanlanciaux/post/NHibernate-Session-Per-Request.aspx)得到一個新的切割。 – Swaff 2011-03-24 13:17:54