2010-03-02 8 views
6

¿Cómo puedo construir una consulta en un campo IUserType personalizado en NHibernate?Construir consulta contra IUserType en NHibernate

Más específicamente: Estoy trabajando en una aplicación brownfield. Tengo un campo en la base de datos llamado "Estado" que contiene un char que representa en qué estado se encuentra un objeto dado.

En mi código quiero que esto se represente como una enumeración así que he creado una enumeración con un valor para cada estado y creado un IUserType que convierte desde el valor de char del db a mi enumeración y viceversa para selecciones & 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 selecto contra el campo char del DB dado un tipo StateEnum.

+0

por favor, puesto que su asignación –

+0

Ese mensaje de error suena como usted no ha mapeado el MyType.State propiedad –

Respuesta

6

su clase y mapeo debe ser algo como lo siguiente:

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

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

NHibernate ha 3 construida en mapeadores de enumeración:

  • PersistentEnumType mapas a una columna int, y no está declarado en el mapeo
  • EnumStringType se asigna a una columna varchar. Los valores son los valores ToString() de la enumeración.
  • EnumCharType se asigna a una columna char. Los valores son el resultado de (char) (int) enumvalue.
+0

resultó ser una escribe mal en mi config pero tienes que hacerlo bien – hackerhasid

Cuestiones relacionadas