-1

バッグを次のようにマッピングします。

<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;

しかし、この場合、コレクションのジェネリック型は単なる文字列であり、メタデータからテーブル名を取得する方法が見つかりませんでした。

ご協力いただきありがとうございます!

4

2 に答える 2

1

これが必要な場所を知ることは興味深いでしょう。それにもかかわらず

var metaData = sf.GetClassMetadata("containingType");
var c = (CollectionType)metaData.PropertyTypes[Array.IndexOf(metaData.PropertyNames, "collectionPropertyName")];
var tablename = c.GetAssociatedJoinable((ISessionFactoryImplementor)sf).TableName;
于 2012-08-14T08:18:22.587 に答える
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;
于 2012-08-16T10:26:25.277 に答える