Построение запроса против IUserType в NHibernate

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

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

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

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

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

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

could not resolve property: State of: MyNamespace.MyType

по-видимому, потому что NHibernate не знает, как сделать выбор против символьного поля DB, учитывая тип StateEnum.

6
задан hackerhasid 2 March 2010 в 22:32
поделиться

1 ответ

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

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

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

NHibernate имеет 3 встроенных средства отображения для enum:

  • PersistentEnumType отображается в столбец int и не объявляется в отображении.
  • EnumStringType отображается в столбец varchar. Значения - это значения ToString () перечисления.
  • EnumCharType отображается в столбец char. Значения являются результатом (char) (int) enumvalue .
6
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: