NHibernateは二次キャッシュからオブジェクトを削除します
-
21-09-2019 - |
質問
私はちょうど私のアプリケーションの一つでNHibernateの二次キャッシュを使用する方法について考え始めました。私はおそらくASP.netキャッシュに依存しているNHibernate.Caches.SysCache.SysCacheProvider
を使用することになります。
キャッシュを有効にするには問題ありませんでしたが、私はキャッシュeを管理する方法に疑問に思って。グラム。プログラムでキャッシュなどから特定のエンティティを削除します。
私のアプリケーションは、画像データベースのいくつかの種類です。バックエンドを超えるユーザーがアップロードイメージはと/ImageDb/Show?userId=someUserId
にアクセスすることにより、フロントエンドでそれを見ることができます。
のデータは非常に頻繁に変更されません。それが変更された場合や、ユーザーがキャッシュからのこのユーザのためにキャッシュされたオブジェクトを削除するバックエンドで「私のキャッシュをクリアする」というボタンを問題ではないだろう。
私はのすべてののnhibernatesからキャッシュされたオブジェクトの二次キャッシュを削除することができるオンラインの解決策を見つけました。しかし、一人のユーザーが自分のデータのキャッシュをクリアしようとしたという理由だけで、私は、ユーザーの数十のために全体のキャッシュをクリアしたくない...私には少しもブルートフォースのthatsます。
だから私は基本的にやりたいこと:。選択的にC#でnhibernatesセカンドレベルキャッシュからキャッシュされたDBオブジェクトを削除する
これは可能ですか?私はそれがまた、キャッシュ・プロバイダーに依存しますね。これは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