Pregunta

¿Cómo puedo crear una consulta contra un campo IUserType costumbre en NHibernate?

Más específicamente: Estoy trabajando en una aplicación industrial abandonada. Tengo un campo en la base de datos llamada "Estado", que contiene un char que representa en qué estado de un objeto dado es en.

En mi código Quiero que esto puede representar como una enumeración de modo que he creado una enumeración con un valor para cada estado y creó una IUserType que convierte de valor carácter del db a mi enumeración y la espalda para Selectas y actualizaciones.

Quiero construir una consulta que se ve algo como esto:

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

Sin embargo, esa consulta se produce una excepción:

could not resolve property: State of: MyNamespace.MyType

presumiblemente porque NHibernate no sabe cómo hacer un SELECT en el campo del carbón DB dado un tipo StateEnum.

¿Fue útil?

Solución

Su clase y mapeo debe ser algo parecido a lo siguiente:

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

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

NHibernate ha construido en 3 mapeadores de enumeración:

  • PersistentEnumType se asigna a una columna int, y no está declarado en el mapeo.
  • EnumStringType se asigna a una columna varchar. Los valores son la ToString () valores de la enumeración.
  • EnumCharType se asigna a una columna de carbón. Los valores son el resultado de (char) (int) enumvalue.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top