Nhibernate può lavorare direttamente con i campi privati di una classe dato che vi accede tramite reflection. Questa apparente violazione della privacy dell'oggetto porta comunque notevoli benefici in termini di pulizia di codice. Ad esempio supponiamo di avere una nostra classe il cui campo di identita per il database è un int32 autogenerato da una colonna identity. In questa situazione naturalmente andare a modificare un id manualmente è un operazione che porta sicuramente a molti problemi, a questo punto basta dichiarare la proprietà readonly.
public virtual Int32 Id { get { return mId; } }
private Int32 mId = 0; Naturalmente nel mapping è necessario indicare a nhibernate di accedere al field privato.
<
id access="field" name="mId" column="sect_id" type="int" unsaved-value="0"> <
generator class="identity" /> </
id> In questo semplice modo possiamo essere sicuri che la proprietà Id non verrà mai modificata o toccata durante l'elaborazione della classe dato che l'identità sul database di un oggetto deve essere lasciata all'ORM. Personalmente trovo questa proprietà molto interessante ed aspetto i commenti di Janky a riguardo :)
Alk.