2010-03-02 12 views
6

Come posso costruire una query su un campo IUserType personalizzato in NHibernate?Costruzione di query su IUserType in NHibernate

In particolare: Sto lavorando a un'applicazione in campo. Ho un campo nel database chiamato "Stato" che contiene un carattere che rappresenta lo stato di un dato oggetto.

Nel mio codice voglio che questo sia rappresentato come enum, quindi ho creato un enum con un valore per ogni stato e creato un IUserType che converte dal valore char del db al mio enum e back per selezionare gli aggiornamenti &.

Voglio costruire una query che sembra qualcosa di simile:

session.CreateCriteria<MyType>().Add(Expression.Eq("State", StateEnum.Complete)) 

Tuttavia, tale query genera un'eccezione:

could not resolve property: State of: MyNamespace.MyType 

presumibilmente perché NHibernate non sa come fare una select contro il campo char del DB dato un tipo StateEnum.

+0

Si prega di inviare la mappatura –

+0

Questo messaggio di errore suona come non si è mappato la proprietà MyType.State –

risposta

6

La classe e la mappatura dovrebbe essere qualcosa di simile a quanto segue:

class MyType 
{ 
    public virtual StateEnum State { get; set; } 
} 

<class name="MyType"> 
    <property name="State" type="MyNamespace.MyEnumUserType, MyDll" /> 
</class> 

NHibernate ha 3 costruito nel mapper per enum:

  • PersistentEnumType mappe per una colonna int, e non è dichiarata nella mappatura.
  • EnumStringType mappe su una colonna varchar. I valori sono i valori ToString() dell'enumerazione.
  • EnumCharType mappe a una colonna char. I valori sono il risultato di (char) (int) enumvalue.
+0

si rivelò essere un mistype nel mio config ma dovete farlo bene – hackerhasid

Problemi correlati