桌面应用程序上带有数据库更改通知的NHibernate二级缓存

桌面应用程序上带有数据库更改通知的NHibernate二级缓存,nhibernate,desktop-application,bamboo,second-level-cache,Nhibernate,Desktop Application,Bamboo,Second Level Cache,我正在使用NHibernate开发一个WPF应用程序,以与PostgreSQL数据库通信。 在桌面应用程序上工作的唯一缓存提供程序是(如果我错了,请纠正我)。假设运行我的应用程序的每台计算机都有不同的会话工厂,我的应用程序将从缓存中检索过时的数据 我的问题是,我如何告诉NHibernate/Position查看数据上次更新的时间戳,如果缓存已过时,请刷新它?好吧,我发现二级缓存无法知道数据库是否在NHibernate/cache之外更改,所以我所做的就是在我所有的表上创建一个新的列“Timest

我正在使用NHibernate开发一个WPF应用程序,以与PostgreSQL数据库通信。 在桌面应用程序上工作的唯一缓存提供程序是(如果我错了,请纠正我)。假设运行我的应用程序的每台计算机都有不同的会话工厂,我的应用程序将从缓存中检索过时的数据


我的问题是,我如何告诉NHibernate/Position查看数据上次更新的时间戳,如果缓存已过时,请刷新它?

好吧,我发现二级缓存无法知道数据库是否在NHibernate/cache之外更改,所以我所做的就是在我所有的表上创建一个新的列“Timestamp”

在我的查询中,我首先使用Session.Cachemode(Cachemode.Ignore)选择db的时间戳,以获取db的时间戳,并与缓存的结果进行比较。如果时间戳不同,我将使该查询的缓存无效并再次运行它

关于SysCache,即使知道它可以在WPF桌面应用程序上“工作”,我也不想使用System.Web.Cache,因为我的应用程序需要完整的.Net Framework而不是客户端配置文件。我做了一次搜索,为了让我高兴,有人编写了一个Nhiberate缓存提供程序,它实现了(System.Runtime.Caching),它不是ASP.Net组件。如果有人感兴趣,您可以在以下网址找到来源:

这是一个属性,您可以在缓存级别设置,并根据应用程序的需要使项目过期,然后拥有缓存。Ncache可能是NHibernate的二级缓存提供程序。NCache确保其缓存在多台服务器上保持一致,并且所有缓存更新都正确同步,因此不会出现数据完整性问题。欲了解更多信息,请访问:


您的假设是错误的-所有缓存在所有类型的应用程序中都能工作。我不确定这一点,例如SYSCACHE依赖于System.Web.Cache,Microsoft不建议在桌面应用程序上使用它。请尝试一下。。。你到底在哪里读到了不推荐的内容?如果System.Web.Cache适用于桌面应用程序,为什么它会是ASP.NET模块?无论如何,我找到了一个实现System.Runtime.Caching的缓存提供程序,下面是关于我答案的更多详细信息。