我正在尝试为我的 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/