1

NHibernate を使用して PostgreSQL データベースと通信する WPF アプリケーションを開発しています。デスクトップ アプリで機能する唯一のキャッシュ プロバイダーは、Bamboo Prevalence です (間違っていたら訂正してください)。アプリケーションを実行するすべてのコンピューターが異なるセッション ファクトリを持つことを考えると、アプリケーションはキャッシュから古いデータを取得します。

私の質問は、NHibernate/Prevalence に、データが最後に更新されたときのタイムスタンプを調べて、キャッシュが古い場合は更新するように指示するにはどうすればよいですか?

4

2 に答える 2

0

データベースが Nhibernate/Cache の外で変更されたかどうかを 2 番目のレベルのキャッシュが知る方法がないことがわかったので、すべてのテーブルに新しい列 'Timestamp' を作成しました。

私のクエリでは、最初に Session.Cachemode(CacheMode.Ignore) を使用してデータベースのタイムスタンプを選択し、データベースのタイムスタンプを取得し、キャッシュからの結果と比較します。タイムスタンプが異なる場合は、そのクエリのキャッシュを無効にして、もう一度実行します。

SysCache については、WPF デスクトップ アプリで「機能する」ことを知っていても、System.Web.Cache を使用することに熱心ではありませんでした。私のアプリケーションでは、クライアント プロファイルの代わりに完全な .Net Framework が必要になるからです。私は検索を行いましたが、幸いなことに、誰かが (System.Runtime.Caching) を実装する Nhiberate キャッシュ プロバイダーを作成しました。魔女は ASP.Net コンポーネントではありません。興味のある方は、 https ://github.com/Leftyx/nhcontrib/tree/master/src/NHibernate.Caches/MemoryCache でソースを見つけることができます 。

于 2013-02-11T12:03:45.883 に答える