获取启用了二级缓存的 类 和集合的列表
Getting a list of classes and collections that have second level caching enabled
给定对 ISessionFactory
实例的引用,是否可以获取所有 类 和启用了二级缓存的集合的列表?
编辑:
为我要实现的目标提供更多背景信息:
我想构建一个管理界面,它可以提供使用 sessionFactory.Evict
和 sessionFactory.EvictCollection
刷新部分二级缓存的能力。可以找到更多信息 here.
例如:
- 刷新该类型的所有实体
- 刷新此特定实体
- 刷新该实体的所有集合
- 刷新这个特定的实体集合
为此,我需要一种方法来动态列出可用于执行刷新操作的实体和实体集合类型。
您可以使用 GetAllClassMetadata()
和 GetAllCollectionMetadata()
方法从持久类和集合中获取元数据。
诀窍是您需要将返回的元数据 类 转换为 IEntityPersister
和 ICollectionPersister
,您现在可以在其中检查 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);
}
给定对 ISessionFactory
实例的引用,是否可以获取所有 类 和启用了二级缓存的集合的列表?
编辑:
为我要实现的目标提供更多背景信息:
我想构建一个管理界面,它可以提供使用 sessionFactory.Evict
和 sessionFactory.EvictCollection
刷新部分二级缓存的能力。可以找到更多信息 here.
例如:
- 刷新该类型的所有实体
- 刷新此特定实体
- 刷新该实体的所有集合
- 刷新这个特定的实体集合
为此,我需要一种方法来动态列出可用于执行刷新操作的实体和实体集合类型。
您可以使用 GetAllClassMetadata()
和 GetAllCollectionMetadata()
方法从持久类和集合中获取元数据。
诀窍是您需要将返回的元数据 类 转换为 IEntityPersister
和 ICollectionPersister
,您现在可以在其中检查 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);
}