Pergunta

Como posso construir uma consulta contra um campo IUSERTYPE personalizado em Nibernate?

Mais especificamente: estou trabalhando em um aplicativo brownfield. Eu tenho um campo no banco de dados chamado "estado", que contém um carvão que representa em que estado um determinado objeto está.

No meu código, quero que isso seja representado como uma enumeração, então criei uma enumeração com um valor para cada estado e criei um iuserType que se converte do valor de char do banco de dados em minha enumeração e volta para selecionar e atualizações.

Eu quero construir uma consulta que se pareça com a seguinte:

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

No entanto, essa consulta joga uma exceção:

could not resolve property: State of: MyNamespace.MyType

Presumivelmente, porque o Nhibernate não sabe como fazer uma seleção no campo de char do banco de dados, dado um tipo de estadual.

Foi útil?

Solução

Sua aula e mapeamento devem ser algo como o seguinte:

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

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

Nhibernate possui 3 mapeadores para enum:

  • Persistentenumtype Mapas para uma coluna int e não é declarado no mapeamento.
  • EnumstringType Mapas para uma coluna VARCHAR. Os valores são os valores tostring () da enumeração.
  • EnumChartype Mapas para uma coluna CHAR. Os valores são o resultado de (char) (int) enumvalue.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top