如何清除NHibernate的整个二级缓存

25
我希望能够通过代码清除NHibernate中的整个二级缓存。有一种方法可以独立于所使用的缓存提供程序吗?(我们有客户在同一个应用程序中使用memcache和syscache)。
由于数据库外部的更改可能已经发生(且我们无法保证哪些表/实体会受到影响,因此我们必须假定最坏情况),我们希望清除整个缓存。请注意保留HTML标记。
1个回答

36
这应该可以做到:
sessionFactory.EvictQueries();
foreach (var collectionMetadata in sessionFactory.GetAllCollectionMetadata())
         sessionFactory.EvictCollection(collectionMetadata.Key);
foreach (var classMetadata in sessionFactory.GetAllClassMetadata())
         sessionFactory.EvictEntity(classMetadata.Key);

最近(例如 3.3.x)版本的 NHibernate 是否仍然可用? - DanP
1
@DanP 应该可以。元数据或缓存没有进行任何重大更改。 - Diego Mijelshon
在多用户环境中清除这个会有任何负面影响吗?例如,如果先前的查询结果在逻辑处理过程中被半途抛弃,是否会导致Web请求抛出500错误? - ps2goat
@ps2goat 不应该。它只是一个缓存。 - Diego Mijelshon
1
我认为ps2goat所关心的重要问题是缓存是否线程安全。在另一个调用正在从缓存中读取时清除缓存会导致任何问题吗? - mikeschuld
这并不是绝对的,但这也不意味着每个人都正确地编写了他们的第三方缓存。我只是指出ps2goat实际上在他们的问题中想表达什么。 - mikeschuld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接