社内アプリケーションに既にキャッシュされているデータベース内の 1 つまたは複数のビジネス エンティティを変更する作業を頻繁に行うことがあります。アプリ プールを循環させずにアプリケーションにこれらの変更を反映させるために、開発者/管理者がアプリの UI 内から (完全にまたは特定のオブジェクトに対して) キャッシュを削除する機能を組み込むことを考えましたが、次のコメントに気付きました。メソッドは次のように述べています...
/// <summary>
/// Evict an entry from the process-level cache. This method occurs outside
/// of any transaction; it performs an immediate "hard" remove, so does not respect
/// any transaction isolation semantics of the usage strategy. Use with care.
/// </summary>
void ISessionFactory.Evict(Type persistentClass, object id);
それは正確にはどういう意味ですか?トランザクションに関与している可能性のある 1 つまたは複数のオブジェクトを削除しようとすると、何が問題になる可能性がありますか? また、それらが破壊的な場合、これらの副作用を回避する方法はありますか? 私は現在 SysCache2 を使用しており、SqlDependency の使用方法に関する実装の詳細を探していますが、当面の Evict 効果についてはまだ興味があります。
更新:コメントをよく見ると、プロセス レベルのキャッシュから削除し、2 番目のレベルのキャッシュから削除するようにSessionFactory.Evict()
見えSessionFactory.EvictCollection()
ますSessionFactory.EvictEntity()
。ただし、どちらのフレーバーにも同じ免責事項があります。だから私の最初の質問はまだ残っています。別のトランザクションで現在使用されているエンティティをキャッシュ (プロセスまたは第 2 レベル) から削除すると、どのような危険がありますか?