我正在使用NHibernate开发一个WPF应用程序来与PostgreSQL数据库进行通信。 唯一适用于桌面应用程序的缓存提供程序是Bamboo Prevalence(如果我错了,请更正我)。鉴于运行我的应用程序的每台计算机都有不同的Session Factory,我的应用程序将从缓存中检索过时的数据。
我的问题是,如何告诉NHibernate / Prevalence查看上次更新数据的时间戳,如果缓存过时,请刷新它?
答案 0 :(得分:0)
好吧,我发现二级缓存无法知道数据库是否在Nhibernate / Cache之外被更改,所以我所做的就是在我的所有表上创建一个新列'Timestamp'。
在我的查询中,我首先使用Session.Cachemode(CacheMode.Ignore)选择数据库的时间戳,以获取数据库的时间戳,并将其与缓存的结果进行比较。在时间戳不同的情况下,我使该查询的缓存无效并再次运行它。
关于SysCache,即使知道它可以在WPF桌面应用程序上运行,我也不热衷于使用System.Web.Cache,因为我的应用程序需要完整的.Net Framework而不是Client Profile。我做了一个搜索,为了我的幸福,有人编写了一个实现(System.Runtime.Caching)的Nhiberate缓存提供程序,女巫不是ASP.Net组件。如果有人有兴趣,您可以在以下位置找到来源: https://github.com/Leftyx/nhcontrib/tree/master/src/NHibernate.Caches/MemoryCache
答案 1 :(得分:0)
这是一个属性,您可以在缓存级别设置并根据应用程序需要使项目到期,然后拥有缓存。 Ncache是NHibernate的可能L2缓存提供程序。 NCache确保其缓存在多个服务器之间保持一致,并且所有缓存更新都正确同步,因此不会出现数据完整性问题。要了解更多信息,请访问:
http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html