2010-10-19 24 views
4

Est-il possible de configurer NHibernate pour charger/persister une propriété non publique d'une classe? Par exemple, je peux avoir une classe Item comme suit.NHibernate peut-il définir des propriétés non publiques?

public class Item 
{ 
    public int ItemID {get; set;} 
    public string Name{get; set;} 
} 

Avec la mise en correspondance suivante:

<class name="RCL.Item" table="Items"> 
    <id name="ItemID" type="Int32" column="ItemID"> 
     <generator class="native"/> 
    </id> 
    <property name="Author" /> 
</class> 

Cependant, je ne veux vraiment pas les consommateurs de ma classe d'objet pour être en mesure de modifier le champ ItemID. Puis-je restreindre l'accès à l'accesseur set de ItemID? Si oui, que dois-je faire? Privé, protégé, interne, protégé interne?

Répondre

10

du tutoriel NHibernate:

Propriétés ne sont pas déclarées publiques - NHibernate peut persister une propriété avec un interne, protégée, protégée visibilité interne ou privée.

Il suffit de régler le ItemID à privé

+2

Humm, ok qui était stupide facile. Mais comment NHibernate peut-elle voir mes accesseurs privés? –

+2

Utilisation de la réflexion – gcores

+0

Je reçois cette erreur lorsque la propriété est interne. Les types suivants ne peuvent pas être utilisés comme proxy: Elément: la méthode get_ItemID doit être 'public/protected virtual' ou 'protected internal virtual' –