特定の地域のレベル2キャッシュを手動でクリアしようとしています。投稿されたメソッドがin answer to this questionであることがわかりました。これはエンティティをクリアするために働いていますが、何らかの理由でクエリキャッシュがクリアされていません。これにより、次回にエンティティがデータベースから取得されるときに、各エンティティに対する個別のクエリが生成されます。何もパラメータなしでsessionFactory.EvictQueries()を呼び出すと、ifが動作します。私が特定の地域名を渡しているときには機能しません。どのような問題が起こっているかについての任意のアイデア?Nhibernate特定の地域のキャッシュをクリアする
コードは、上記のリンクからです:
private void ClearRegion(string regionName)
{
_sessionFactory.EvictQueries(regionName);
foreach (var collectionMetaData in _sessionFactory.GetAllCollectionMetadata().Values)
{
var collectionPersister = collectionMetaData as NHibernate.Persister.Collection.ICollectionPersister;
if (collectionPersister != null)
{
if ((collectionPersister.Cache != null) && (collectionPersister.Cache.RegionName == regionName))
{
_sessionFactory.EvictCollection(collectionPersister.Role);
}
}
}
foreach (var classMetaData in _sessionFactory.GetAllClassMetadata().Values)
{
var entityPersister = classMetaData as NHibernate.Persister.Entity.IEntityPersister;
if (entityPersister != null)
{
if ((entityPersister.Cache != null) && (entityPersister.Cache.RegionName == regionName))
{
_sessionFactory.EvictEntity(entityPersister.EntityName);
}
}
}
}
キャッシングは、作業やNHProfilerを使用して検証されます。
nhusersグループ(https://groups.google.com/forum/#!forum/nhusers)で聞いてみましたか? –
問題があるかどうかを確認するには、コードと設定を共有する必要があります。 – Najera