1

次の行を使用して、実行時にPOCOクラスのnhibernateマッピングをロードしようとしています。

var persistentClass = NHibernateHelper.Configuration.GetClassMapping( type );
var property = persistentClass.GetProperty( propertyName );

次のマッピングを持つクラスのプロパティGroupIdで失敗することを除いて、正常に動作します。

<class name="GroupPartnerInterest" table="[GROUP_PARTNER_INTERESTS]">
  <composite-id >
    <key-property name="GroupId" column="PAR_ID" />

type == typeof(GroupPartnerInterest) persistentClass.GetProperty( "GroupId" )MappingExceptionで失敗した場合:

プロパティが見つかりません:エンティティGroupPartnerInterestのGroupId "

デバッガーで、key-propertiesfromcomposite-idがpersistentClass.propertiesに表示されないことがわかります。

このキープロパティのマッピングを取得する方法はありますか?

前もって感謝します。

4

1 に答える 1

1

通常のプロパティを繰り返すことができますpersistentClass.PropertyClosureIterator(つまり、基本クラスのプロパティを含みます)。

主なプロパティはにあり( ( Component )( persistentClass.Identifier ) ).PropertyIteratorます。

したがって、このコードを使用して、主要なプロパティと通常のプロパティの両方を検索できます。

var propserties = persistentClass.PropertyClosureIterator;
if ( persistentClass.Identifier is Component )
{
    properties = ( ( Component )( persistentClass.Identifier ) ).PropertyIterator
                    .Union( properties );
}

Property property
    = (
        from it in properties
        where it.Name == propertyName
        select it
      ).FirstOrDefault();
于 2010-09-01T08:53:26.170 に答える