如何获得一个简单包的表名?

时间:2012-08-09 13:54:50

标签: c# .net nhibernate

将包装映射如下:

<bag name="Addresses" table="address" cascade="all-delete-orphan">
  <key column="employee"/>
  <element column="address"/>
</bag>

如何在运行时获取存储地址的表名?

如果集合泛型类型是NHibernate映射类,我可以这样做:

var tableName = (sessionFactory.GetClassMetadata(itemType) as SingleTableEntityPersister).TableName;

但在这种情况下,集合泛型类型只是一个字符串,我找不到任何方法从元数据中检索表名。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

知道你需要它的地方会很有趣。然而

var metaData = sf.GetClassMetadata("containingType");
var c = (CollectionType)metaData.PropertyTypes[Array.IndexOf(metaData.PropertyNames, "collectionPropertyName")];
var tablename = c.GetAssociatedJoinable((ISessionFactoryImplementor)sf).TableName;

答案 1 :(得分:0)

另一种可能的解决方案:

var classMetadata= sessionFactory.GetClassMetadata(typeof(parentClass)) as SingleTableEntityPersister;
var key = classMetadata.RootEntityName + "." + propertyName;
var allCollectionMetadata = sessionFactory.GetAllCollectionMetadata();
var childTableName = (allCollectionMetadata[key] as BasicCollectionPersister).TableName;