Domanda

Come faccio a costruire una query su un campo IUserType personalizzato in NHibernate?

In particolare: Sto lavorando su un'applicazione brownfield. Ho un campo nel database chiamato "Stato", che contiene un carattere che rappresenta quale stato un dato oggetto è in.

Nel mio codice Voglio che questo essere rappresentato come un enum così ho creato un enum con un valore per ogni stato e creato un IUserType che converte da valore char del db al mio enum e ritorno per seleziona e 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 un SELECT char campo del DB dato un tipo StateEnum.

È stato utile?

Soluzione

La classe e la mappatura dovrebbe essere qualcosa di simile al seguente:

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

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

NHibernate è costruito in 3 mapper per enum:

  • PersistentEnumType Mappe per una colonna int, e non è dichiarato nella mappatura.
  • EnumStringType Mappe per una colonna varchar. I valori sono il ToString () valori della enum.
  • EnumCharType Mappe a una colonna char. I valori sono il risultato di (char) (int) enumvalue.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top