Logo UGIdotNET

Mappare enumerati in campi stringa con NHibernate

NHibernate mappa per default i tipi enumerativi verso una colonna di tipo intero, ma è possibile configurarlo in modo da mappare una proprietà di tipo enumerato su una colonna di tipo stringa. Per farlo occorre definire un tipo personalizzato che sia in grado di operare tale conversione. Nel framework NHibernate è disponibile il tipo "EnumStringType", che è utilizzabile come classe base per velocizzare tale operazione.

//definizione dell'enum
enum Sesso
{
    Maschio,
    Femmina
}

//definizione del tipo per la mappatura
class SessoType: NHibernate.Type.EnumStringType
{
    //nel costruttore indico il tipo dell'enumerato e la lunghezza della stringa
    public SessoType() : base(typeof(Sesso), 7) { ;}
}

//mappatura del campo nel file .hbm.xml
<property name="Sesso" column="SESSO" type="MyNamespace.SessoType,MyAssembly"/>

Nell'esempio appena mostrato si sta eseguendo una mappatura semplice nella quale il valore del campo in tabella sarà uguale al nome del valore dell'enum espresso in formato stringa. Seppur apparentemente poco applicabile in casi reali, intervenendo sulla ridefinizione (override) di alcuni metodi è anche possibile operare mappature più interssanti, come ad esempio mappare il valore Maschio con la stringa "M" e Femmina con "F".

Autore: Marco Barzaghi
Data: 21 giugno 2007
Ultimo aggiornamento: 21 giugno 2007
Categorie:  Varie Data Access

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185