2010-03-02 4 views
6

Wie kann ich eine Abfrage für ein benutzerdefiniertes IUserType-Feld in NHibernate erstellen?Abfrage für IUserType in NHibernate erstellen

Genauer gesagt: Ich arbeite an einer Brownfield-Anwendung. Ich habe ein Feld in der Datenbank namens "State", die ein Zeichen enthält, in dem der Zustand eines bestimmten Objekts ist.

In meinem Code möchte ich dies als eine Enumeration dargestellt werden, so habe ich eine enum mit einem Wert erstellt Für jeden Status und erstellt einen IUserType, der aus dem Char-Wert der Datenbank in meine enum und zurück konvertiert für wählt & Updates.

ich eine Abfrage erstellen möchten, die etwa wie folgt aussieht:

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

Allerdings wirft diese Abfrage eine Ausnahme:

could not resolve property: State of: MyNamespace.MyType 

vermutlich weil NHibernate nicht weiß, wie ein wählen zu tun gegen das Char-Feld der DB bei einem StateEnum-Typ.

+0

Bitte posten Sie Ihre Mapping –

+0

Diese Fehlermeldung klingt wie Sie nicht die Eigenschaft MyType.State –

Antwort

6

Ihre Klasse und Mapping sollte wie folgt gestaltet sein:

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

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

NHibernate hat 3 in Mapper für Enum gebaut:

  • PersistentEnumType Karten auf eine Int-Spalte, und wird nicht erklärt in der Zuordnung.
  • EnumStringType wird einer Varchar-Spalte zugeordnet. Die Werte sind die ToString() - Werte der Enumeration.
  • EnumCharType wird einer Char-Spalte zugeordnet. Die Werte sind das Ergebnis von (char) (int) enumvalue.
+0

erwies sich als ein Tippfehlern in meine Config zugeordnet haben, aber sie es haben Recht – hackerhasid