从NHibernate的二级缓存删除对象
-
21-09-2019 - |
题
我刚开始想在我的应用程序之一使用NHibernate的二级缓存。我可能会使用它依赖于ASP.net缓存NHibernate.Caches.SysCache.SysCacheProvider
。
启用缓存不是一个问题,但我想知道如何管理高速缓存即G。编程除去从高速缓存等某些实体。
我的应用程序是某种形象的数据库。在后端用户上传的图像,并且可以通过访问/ImageDb/Show?userId=someUserId
在前端查看它
在数据不经常改变。如果它的变化,用户不会有问题了一个名为“清空缓存”,在从缓存中删除了的该用户的缓存对象后端按钮。
我发现了一个解决方案的在线可除去的所有从nhibernates缓存对象第二级高速缓存。但多数民众赞成有点蛮力,我......我不想清除整个缓存为几十个用户,只是因为一个用户试图清除缓存为自己的数据。
所以,我基本上想要做的:选择性地从C#中nhibernates二级缓存删除缓存的数据库对象
这是可能的?我想这也依赖于缓存提供者。如果这不是可行与ASP.net缓存提供者,我打开其它嵌入/开源的建议。
解决方案
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
不隶属于 StackOverflow