2011-03-24 54 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