Question

Comment puis-je construire une requête sur un champ de IUserType personnalisé dans NHibernate?

Plus précisément: Je travaille sur une application de friches industrielles. J'ai un champ dans la base de données appelée « État » qui contient char représentant quel état d'un objet donné est.

Dans mon code, je veux que ce soit représenté comme un ENUM donc j'ai créé un ENUM avec une valeur pour chaque état et créé un IUserType qui convertit de la valeur char de db à mon ENUM et à l'arrière pour sélectionner et mises à jour.

Je veux construire une requête qui ressemble à quelque chose comme ceci:

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

Cependant, cette requête renvoie une exception:

could not resolve property: State of: MyNamespace.MyType

sans doute parce que NHibernate ne sait pas comment faire une sélection sur le champ char de DB donné un type de StateEnum.

Était-ce utile?

La solution

Votre classe et la cartographie devrait être quelque chose comme ce qui suit:

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

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

NHibernate a 3 construit en cartographes pour ENUM:

  • PersistentEnumType Cartes à une colonne int, et non déclarée dans la mise en correspondance.
  • EnumStringType cartes à une colonne varchar. Les valeurs sont les valeurs ToString () du ENUM.
  • EnumCharType cartes à une colonne char. Les valeurs sont le résultat de (char) (int) enumvalue.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top