25

我刚开始考虑在我的一个应用程序中使用 NHibernate 二级缓存。我可能会使用NHibernate.Caches.SysCache.SysCacheProvider依赖于 ASP.net 缓存的。

启用缓存不是问题,但我想知道如何管理缓存,例如以编程方式从缓存中删除某些实体等。

我的应用程序是某种图像数据库。用户通过后端上传图像,并可以通过访问在前端查看它/ImageDb/Show?userId=someUserId

数据不会经常变化。如果它发生变化,用户不会关心后端中名为“清除我的缓存”的按钮,该按钮会从缓存中删除该用户的缓存对象。

我在网上找到了一个解决方案,可以从 nhibernates 二级缓存中删除所有缓存的对象。但这对我来说有点太暴力了......我不想仅仅因为一个用户试图清除他自己的数据的缓存,就清除数十个用户的整个缓存。

所以我基本上想做的是:有选择地从 C# 中的 nhibernates 二级缓存中删除缓存的 db 对象。

这可能吗?我想这也取决于缓存提供程序。如果这对 ASP.net 缓存提供程序不可行,我愿意接受其他内置/开源建议。

4

1 回答 1

45

sessionFactory 提供了您想要的方法...来自NHibernate 参考的 19.3 章

要从会话缓存中完全逐出所有对象,请调用 ISession.Clear() 对于二级缓存,在 ISessionFactory 上定义了用于逐出实例、整个类、集合实例或整个集合角色的缓存状态的方法。

sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat
sessionFactory.Evict(typeof(Cat)); //evict all Cats
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens
sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections
于 2009-11-30T12:08:51.877 回答