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