Вопрос

Как я могу создать запрос к пользовательскому полю IUserType в NHibernate?

Более конкретно:Я работаю над уже существующим приложением.У меня есть поле в базе данных под названием «Состояние», которое содержит символ, показывающий, в каком состоянии находится данный объект.

В моем коде я хочу, чтобы это было представлено в виде перечисления, поэтому я создал перечисление со значением для каждого состояния и создал IUserType, который преобразует значение char из базы данных в мое перечисление и обратно для выбора и обновления.

Я хочу создать запрос, который выглядит примерно так:

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

Однако этот запрос выдает исключение:

could not resolve property: State of: MyNamespace.MyType

предположительно потому, что NHibernate не знает, как выполнить выборку по полю char БД с учетом типа StateEnum.

Это было полезно?

Решение

Ваш класс и сопоставление должны быть примерно такими:

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

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

NHibernate имеет 3 встроенных преобразователя для перечисления:

  • Персистентенумтипе сопоставляется со столбцом int и не объявляется при сопоставлении.
  • EnumStringType сопоставляется со столбцом varchar.Значения представляют собой значения ToString() перечисления.
  • Энумчартипе сопоставляется со столбцом символов.Ценности являются результатом (char) (int) enumvalue.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top