我有一个NHibernate Web应用程序。我使用过sys cache provider。在进行任何事务时,由于DB服务器或App服务器之间的通信问题的任何原因(例如,n / w问题),查询将失败,这是显而易见的。但问题是,这个结果即异常是为该查询缓存的,后续执行返回相同的结果。
更糟糕的情况是即使在版本问题上也会发生这种情况,即在更新域实体时,同一行已经被另一个事务更新,查询执行会给出一个例外消息“行被另一个事务更新或删除” 。此结果将在默认缓存配置时间(5分钟)内缓存。
如何配置不在异常时缓存结果或如何在此方案中清除缓存的结果?
感谢您的帮助。
谢谢和问候,
Vijay Pandurangan
答案 0 :(得分:0)
您可以捕获抛出的异常,然后根据异常,使用ISession.Evict()从缓存中逐出实体(有几个覆盖,并且也存在EvictCollection())。要使整个缓存无效,可以使用ISession.Clear()。如果你真的不相信它,我可能会完全创建一个新的ISession。