2010-03-31 4 views
1

J'ai la classe suivanteNHibernate Collection Mapping - Lecture seule Propriétés

public class Person 
{ 
    private IList<Person> _children; 

    public IEnumerable<Person> Children { get; } 

    public void AddChild(Person child) 
    { 
     // Some business logic and adding to the internal list 
    } 
} 

Quels sont les changements que je dois faire pour NHibenrate pouvoir persister la collection des enfants (à part je sais faire tout virtuel, que l'on).

Dois-je ajouter un setter à la propriété children qui fait quelque chose comme _children.Clear(); _children.AddRange(value). Actuellement, le modèle exprime assez bien mon intention, mais je ne suis pas sûr de l'ampleur du changement nécessaire pour que NH puisse m'aider avec persévérance. NHibernate est capable de mapper des champs privés.

+0

Cela peut simplement fonctionner tel quel, en fonction de votre mappage. Avez-vous une erreur? –

Répondre

2

Les stratégies d'accès et de dénomination sont abordées dans la section property de la documentation de référence.

Faire vos membres du public est nécessaire virtuel pour mandataires au travail. Ce sont généralement des sous-classes générées par l'exécution de vos classes d'entités.

Dans cet exemple, le mappage du champ _children sera Children dans les requêtes HQL et Critères.

<class name="Person" table="person"> 
    <bag name="Children" access="field.camelcase-underscore"> 
     <key column="parentid" /> 
     <one-to-many class="Person" /> 
    </bag> 
</class> 
+0

génial, merci beaucoup. Je ne savais pas que ça pouvait aussi saisir des champs! –