Отображение на Перечислимый битовый флаг в Nhibernate

Установка значения '' не работает во всех браузерах.

Вместо этого попробуйте установить значение на null следующим образом:

document.getElementById('your_input_id').value= null;

EDIT: я получаю очень обоснованные причины безопасности, которые не позволяют JS устанавливать входной файл, однако представляется разумным предоставить простой механизм для очистки уже выбора вывода. Я попытался использовать пустую строку, но она не работала во всех браузерах, NULL работал во всех браузерах, которые я пробовал (Opera, Chrome, FF, IE11 + и Safari).

EDIT: Обратите внимание, что настройка NULL работает во всех браузерах при установке на пустую строку.

15
задан Duncan 13 April 2009 в 23:23
поделиться

4 ответа

Когда я отображаю перечисление, и это перечисление имеет отступающее значение типа 'интервал', я просто отображаю свое перечислимое свойство на международное поле в базе данных. Я не столкнулся с проблемами для этого.
Я сделал это для перечислений флага также, и это просто работает без проблем. При объединении определенных флагов NHibernate сохранит 'комбинацию' тех флагов в указанный столбец в базе данных.
При получении экземпляра, который имеет свойство 'перечислений флага', затем NHibernate воссоздаст его назад к корректной комбинации.
Например, если DB будет содержать '3', то NHibernate заполнит Ваше свойство с комбинацией соответствующих значений.
На самом деле я позволяю NHibernate понять это совершенно один:

<property name="OnCallType" column="OnCallType" />

где столбец OnCallType имеет интервал типа в моем DB, и свойство OnCallType является перечислимым типом, который имеет атрибут флагов.

9
ответ дан 1 December 2019 в 04:47
поделиться

Это не отвечает на Ваш вопрос точно, но могло бы быть легче использовать свойство Int32 в Вашем классе и отображении, и использовать статический класс констант как это для обработки значений в коде:

public static class Permissions
{
    public const int CanComment = 0x1;
    public const int CanEdit = 0x2;
    public const int CanDelete = 0x4;
    public const int CanRemoveUsers = 0x8;
    public const int All = CanComment | CanEdit | CanDelete | CanRemoveUsers;
}

Я знаю, что это не идеально, так как это не ограничивает Ваших пользователей фиксированными перечислимыми значениями и вынуждает Вас иметь дело с сырыми данными ints в коде, но я думаю, в спящем режиме, испытает затруднения из-за поразрядного перечисления. Это попытается отобразить значение в базе данных назад к определенному перечислению значений. Если это найдет значение в базе данных, которая Вы явно не перечислили его, то будет, вероятно, дросселировать. Например, если это найдет "3" в базе данных, то это не сможет отобразить его назад на перечисление значений, если Вы явно не перечислите каждую комбинацию, как CanCommentAndEdit, CanCommentAndEditAndDelete, и т.д. Это, вероятно, побеждает цель использовать поразрядное перечисление.

0
ответ дан 1 December 2019 в 04:47
поделиться

Я думаю, что наилучший вариант для этого состоял бы в том, чтобы использовать Пользовательский Пользовательский Тип . В котором Вы могли отобразить Перечисление в своем классе к тем двум столбцам. Вот пример использования ICompositeUserMap, который может использоваться в качестве руководства:

, Хотя в Вашем случае, просто реализовав IUserType мог быть достаточным.

2
ответ дан 1 December 2019 в 04:47
поделиться

У меня были бы частное международное поле для персистентности NHibernate и общедоступное свойство Getter/Setter для перечисления флага, которые читают и пишут в международное поле. (NHibernate может быть настроен для работы с частными полями),

Тем путем Вы не должны обращаться к вуду волшебные или грязные константы, чтобы сделать задание.

0
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

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