Frage

Wie kann ich eine Abfrage für eine benutzerdefinierte IUserType Feld in NHibernate konstruieren?

Genauer gesagt: Ich arbeite an einer Brach Anwendung. Ich habe ein Feld in der Datenbank „State“ genannt, die ein Zeichen enthält darstellt, was ein bestimmtes Objekt angeben, ist in.

In meinem Code möchte ich dies als Enum vertreten sein, damit ich für jeden Staat eine Enumeration mit einem Wert erstellt haben und eine IUserType erstellt, dass Konvertiten aus dem char-Wert des db meiner Enum und zurück für wählt & Updates.

Ich möchte eine Abfrage, die aussieht, so etwas konstruieren:

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

Sie jedoch, dass Abfrage löst eine Ausnahme:

could not resolve property: State of: MyNamespace.MyType

vermutlich weil NHibernate nicht wissen, wie ein gegen den char Feld des DB wählen zu tun, um einen StateEnum Typen gegeben.

War es hilfreich?

Lösung

Ihre Klasse und Mapping etwa wie folgt sein sollte:

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 ist nicht in der Abbildung erklärt.
  • EnumStringType Karten zu einer Varchar-Spalte. Die Werte sind die ToString () Werte der Enumeration.
  • EnumCharType Karten auf eine char-Spalte. Die Werte sind das Ergebnis (char) (int) enumvalue.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top