如何在任何异常上清除NHibernate Cache

时间:2011-04-18 08:33:42

标签: nhibernate caching

我有一个NHibernate Web应用程序。我使用过sys cache provider。在进行任何事务时,由于DB服务器或App服务器之间的通信问题的任何原因(例如,n / w问题),查询将失败,这是显而易见的。但问题是,这个结果即异常是为该查询缓存的,后续执行返回相同的结果。

更糟糕的情况是即使在版本问题上也会发生这种情况,即在更新域实体时,同一行已经被另一个事务更新,查询执行会给出一个例外消息“行被另一个事务更新或删除” 。此结果将在默认缓存配置时间(5分钟)内缓存。

如何配置不在异常时缓存结果或如何在此方案中清除缓存的结果?

感谢您的帮助。

谢谢和问候,
Vijay Pandurangan

1 个答案:

答案 0 :(得分:0)

您可以捕获抛出的异常,然后根据异常,使用ISession.Evict()从缓存中逐出实体(有几个覆盖,并且也存在EvictCollection())。要使整个缓存无效,可以使用ISession.Clear()。如果你真的不相信它,我可能会完全创建一个新的ISession。