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

标签 nhibernate nhibernate-mapping

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

目前我有一个测试打开一个已知测试数据库的 session ,然后尝试加载每种类型的第一个实体并断言它不为空。

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

所以,我想做的是检查映射并尝试加载每个映射实体之一,但是构建 session 工厂的 NHibernate Configuration 对象对我的测试不可见,所以我想知道是否有是一种从 session 访问映射实体列表的方法,还是我需要改为公开原始配置?

最佳答案

您可以从 Session 获取 SessionFactory,并且 SessionFactory 具有返回 IClassMetadata 列表的方法 GetAllClassMetadata()。从 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));
    }
}    

关于nhibernate - 是否可以从 NHibernate IStatelessSession 或 ISession 获取所有映射实体的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714954/

相关文章:

nhibernate - 流利的 NHibernate 复合 ID 到映射类

.net - NHibernate ISession Flush : Where and when to use it, 以及为什么?

nhibernate - 如何从FluentNHibernate生成hbm.xml文件

nhibernate - 急切获取引用时重复(多对一)

nhibernate - 从父集合中删除子记录

c# - 一对多映射不是级联删除

nhibernate - 有没有办法在 NHibernate 中伪造一个 ID 列?

c# - 在 NHibernate.Linq 查询中出现 'OFFSET' 错误附近的错误语法

c# - Fluent Nhibernate 映射默认值

c# - 动态创建 WrapPanel 按钮