Max*_*Max 25 nhibernate caching isession second-level-cache
我刚开始考虑在我的一个应用程序中使用NHibernate二级缓存.我可能会使用NHibernate.Caches.SysCache.SysCacheProvider依赖于ASP.net缓存的.
启用缓存不是问题,但我想知道如何管理缓存,例如以编程方式从缓存中删除某些实体等.
我的应用程序是某种图像数据库.用户通过后端上传图像,并可以通过访问在前端查看图像/ImageDb/Show?userId=someUserId
数据不会经常变化.如果它发生变化,用户在后端的名为"清除我的缓存"的按钮无关紧要,该按钮会从缓存中删除此用户的缓存对象.
我在网上找到了一个可以从nhibernates二级缓存中删除所有缓存对象的解决方案.但这对我来说有点太暴力了......我不想为几十个用户清除整个缓存,因为一个用户试图清除缓存中的自己的数据.
所以我基本上想做的是:有选择地从C#中的nhibernates二级缓存中删除缓存的db对象.
这可能吗?我想这也取决于缓存提供商.如果ASP.net缓存提供程序无法做到这一点,我可以使用其他内置/开源建议.
Jag*_*uar 44
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11853 次 |
| 最近记录: |