是否有可能从NHibernate IStatelessSession或ISession获取所有映射实体的列表?

Eam*_*mon 3 nhibernate nhibernate-mapping

我正在尝试为我的NHibernate映射编写一个测试,它将自动获取并测试任何新添加的映射.

目前,我有一个测试打开一个已知测试数据库的会话,然后尝试加载每个类型的第一个实体并断言它不是null.

这一切都很好,但这意味着每次添加新的实体映射时,我都需要记住更新测试.

所以,我想要做的是检查映射并尝试加载每个映射实体中的一个,但是我的测试看不到构建sessionfactory的NHibernate Configuration对象,所以我想知道是否有办法从会话中访问映射实体的列表,还是需要公开原始配置?

Nik*_*lay 5

您可以从Session获取SessionFactory,SessionFactory具有GetAllClassMetadata()方法,该方法返回IClassMetadata列表.从IClassMetadata您可以获得MappedClass(GetMappedClass())

但是你需要一些额外的工作来获得子类.此代码可以帮助:

var metaData = this.session.SessionFactory.GetClassMetadata(baseClass);
if (metaData != null && metaData.HasSubclasses)
{
    foreach (string entityName in ((NHibernate.Persister.Entity.IEntityPersister)metaData).EntityMetamodel.SubclassEntityNames)
    {
        var metadata = this.session.SessionFactory.GetClassMetadata(entityName);
        result.Add(metadata.GetMappedClass(EntityMode.Poco));
    }
}    
Run Code Online (Sandbox Code Playgroud)