获取启用了二级缓存的 类 和集合的列表

Getting a list of classes and collections that have second level caching enabled

给定对 ISessionFactory 实例的引用,是否可以获取所有 类 和启用了二级缓存的集合的列表?

编辑:

为我要实现的目标提供更多背景信息:

我想构建一个管理界面,它可以提供使用 sessionFactory.EvictsessionFactory.EvictCollection 刷新部分二级缓存的能力。可以找到更多信息 here.

例如:

为此,我需要一种方法来动态列出可用于执行刷新操作的实体和实体集合类型。

您可以使用 GetAllClassMetadata()GetAllCollectionMetadata() 方法从持久类和集合中获取元数据。

诀窍是您需要将返回的元数据 类 转换为 IEntityPersisterICollectionPersister,您现在可以在其中检查 Cache 属性如果为 entity/collection.

配置了缓存,则不应为 null

所以你的 could 看起来像这样

var cachedEnityTypes = new List<string>();
var cachedCollectionRoles = new List<string>();
foreach (var classMetadata in sessionFactory.GetAllClassMetadata())
{
    var persister = classMetadata.Value as IEntityPersister;
    if (persister != null && persister.Cache != null)
        cachedEnityTypes.Add(persister.EntityName);
}
foreach (var collectionMetadata in nHibernateSessionFactory.GetAllCollectionMetadata())
{
    var persister = collectionMetadata.Value as ICollectionPersister;
    if (persister != null && persister.Cache != null)
        cachedCollectionRoles.Add(collectionMetadata.Value.Role);
}