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 回答