【问题标题】:Fluent NHibernate asp.net MVC cachingFluent NHibernate asp.net MVC 缓存
【发布时间】:2011-03-24 11:54:27
【问题描述】:

我的 ASP.NET MVC2 项目有问题。我使用 Fluent NHibernate 作为 ORM,我非常喜欢它。我遇到的问题是缓存(我认为)。例如,我有一个 JQuery DataTable,它通过控制器从数据库中使用 ajax 获取数据。 DataTable 列出了数据库中的不同内容,如果我删除或添加一些帖子,数据似乎不会更新,即使调用正在进行并且 NHibernate 做了它应该做的事情(我认为)。

如果我重新运行项目(本地编程),数据只会按应有的方式更新,但有时即使这样也不起作用。

是缓存问题吗?是 NHibernate 缓存还是浏览器?

【问题讨论】:

  • 你只在 IE 中看到这个吗?例如在 Firefox/Chrome 中尝试。 IE 非常积极地缓存 ajax 请求。另外,添加帖子后,您可以检查数据库并查看数据是否更新。
  • 我在 chrome 和 FF 中看到它。问题是我通过将帖子直接添加到数据库而不是通过应用程序来测试它。所以数据库正确更新了。
  • 您需要通过应用程序来允许 nHibernate 看到数据,否则数据对 nHibernate 不可用。您将不得不 Clear() 缓存以强制 nHibernate 返回数据库。
  • 是的,你一定是对的。因为如果我添加具有我功能的新用户(并与他们一起登录),它就会起作用。谢谢!

标签: ajax nhibernate asp.net-mvc-2 caching datatable


【解决方案1】:

如果数据是在数据库而不是通过应用程序更新的,nHibernate 将不知道该数据,并且当通过 List() 再次查询时,或者 Load() 将不会返回数据库以获取完整数据设置。

这里的建议是:

  • 为此测试创建一些方法 通过将数据放入数据库 休眠
  • 或者在测试中 阶段,有服务方法 被 jQuery Clear 调用 每次缓存,从而强制 nHibernate 回到数据库 每个请求。

这可以完全使用 ISession.Clear() 完成,或者可以使用 Evict() 驱逐已知对象。

不是真正的上线选项,因为它有 nHibernate 缓存数据的优势。

【讨论】:

  • 如果我有其他应用程序更新数据库怎么办?如果是这样,NHibernate 将不会知道它。唯一的解决办法是清除缓存?
  • 当然,或者让您的 nHibernate 会话仅在 HTTP 请求期间持续,以便 each request 得到新的切入点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多