2010-08-26 3 views
1

Je suis en train de charger la cartographie NHibernate pour les classes POCO lors de l'exécution avec des lignes suivantes:Comment obtenir le mappage de la propriété key dans NHibernate?

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

Il fonctionne très bien, sauf qu'il tombe en panne sur la propriété GroupId sur une classe avec la cartographie suivante:

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

Si type == typeof(GroupPartnerInterest)persistentClass.GetProperty("GroupId") échoue avec MappingException:

propriété non trouvée: GroupId sur l 'entité GroupPartnerIn térêt »

Je peux voir Débogueur que key-properties de composite-id ne figurent pas dans persistentClass.properties.

Existe-t-il un moyen d'obtenir le mappage de cette propriété de clé?

Merci d'avance.

Répondre

1

Les propriétés ordinaires peuvent être itérées par l'intermédiaire de persistentClass.PropertyClosureIterator (qui inclut les propriétés des classes de base).

Les propriétés clés sont dans ((Component)(persistentClass.Identifier)).PropertyIterator.

Donc, avec ce morceau de code que je suis en mesure de rechercher les principales propriétés et propriétés ordinaires:

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(); 
Questions connexes