Как получить сопоставление для ключевого свойства в NHibernate? - PullRequest
1 голос
/ 26 августа 2010

Я пытаюсь загрузить отображение nhibernate для классов POCO во время выполнения со следующими строками:

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:

свойство не найдено: GroupId для объекта GroupPartnerInterest "

Я вижу в отладчике, что key-properties из composite-id не отображаются в persistentClass.properties.

Есть ли способ получить сопоставление для этого ключевого свойства?

Заранее спасибо.

1 Ответ

1 голос
/ 01 сентября 2010

Обычные свойства могут повторяться до 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...