简而言之:如何获取映射到我的实体的所有表名的列表?
为什么: 我们有一组由NHibernate支持的WCF Web服务,通过FluentNHibernate映射。我们在架构中构建了一个简单而强大的健康检查功能。我们可以调用一个安全的Diagnose()服务操作,它会向我们的Windsor容器询问IHealthCheck接口的所有已注册实例。我们有许多具体的接口实现,用于检查产品安装的状态 - 即数据库连接,种子数据,下行服务连接等等。
我们已经构建了许多检查NHibernate代码健康状况的东西。例如,我们借用这个[1]代码形式Ayende来查询每个映射。我想围绕我们与NHibernate一起使用的自定义KeyGenerator实现进行检查。我们有一个表在数据库中存储每个表的行。我们的HILO算法使用该表来执行密钥生成。所以,我想编写一个检查,确认我们的SessionFactory中的每个映射实体在该表中都有一行代表实体支持表。
任何指针都将不胜感激。 session.SessionFactory.GetAllClassMetadata()闻起来很有希望,但我看不出我到底在找什么。
干杯。
[1] http://ayende.com/Blog/archive/2006/08/09/NHibernateMappingCreatingSanityChecks.aspx
答案 0 :(得分:5)
我通过保持对我用来构建SessionFactory的NHibernate.Cfg.Configuration的引用做了同样的事情。
它有一个ClassMappings集合,其中包含每个实体的PersistentClass对象。 PersistentClass.Table.Name属性应该是您正在寻找的。 p>