2013-03-05 4 views
0

Я хочу сохранить набор enums в NHibernate, возможно в формате с разделителем, используя | или ,. Я бы хотел сделать это ровно, то есть никаких связанных таблиц (что является излишним для моей ситуации).Как сохранить несколько перечислений без связанных таблиц?

Теперь я могу использовать выбор enum и хранить один (то есть, падение вниз или радио кнопки) без проблем:

public enum Test 
{ 
    Choice1, Choice2, Choice3 
} 

public virtual Test? TestRadioButtons { get; set } 

Если пользователь выбирает Choice1, который будет сохранен в базе данных NHibernate , Но если я хочу вариант для выбора нескольких, используя Test перечисление выше, например, список флажков, я не имею никакой удачи:

public virtual List<Test> TestCheckBoxList { get; set; } 

или

public virtual List<string> TestCheckBoxList { get; set; } 

отбросит ошибки (я получаю ошибка «таблица не существует» для первой, и Generic.List против generic.icollection или некоторые варианты для последнего). Если пользователь выбирает «Choice1» и «Choice2» из списка флажков, сохраняется только «Choice1». Опять же, для моей ситуации создание отдельных таблиц является излишним.

Невозможно сохранить несколько перечислений как своего рода разделительный список в NHibernate?

+1

Можете ли вы перечислить перечисление для разделения столбцов? Если значение действительно является * непрозрачной информацией * и/или * не флагом *, сохранение его как одного столбца позже может осложнить запросы. – 2013-03-05 00:09:09

+0

Хорошая точка в запросах. Тем не менее, я не имею ни малейшего представления о том, как хранить в отдельных столбцах. Лемм еще несколько исследований. –

ответ

2

Вам понадобится использовать Flag enum и сохранить объединенное значение в базе данных как одно значение. См. this answer для примера и пояснений.

Это сделает его намного труднее читать люди, так как большинство из нас не автоматически переводит число в его эквивалентную последовательность бит. Тем не менее, это должно сделать преобразование происходит автоматически в вашем коде.

+0

Но просто делать 'public virtual int TestCheckBoxList {get; задавать; } 'недостаточно. Должен ли я создать «прокси» для преобразования? Как я могу это сделать? Я ничего не рисую, но делаю это через код. –

+1

@MEMoriarty - Что значит «недостаточно»? Вы просто выполните «TestCheckBoxList = Test.Choice1 | Test.Choice3; ', чтобы установить его. – Bobson

+0

У меня проблема: я не знаю, как ее установить. К сожалению, плохой грамматик, это должно было быть: «Делает ли' public virtual int TestCheckBoxList {get; set;} 'достаточно?" для сохранения в БД. Не могли бы вы привести пример того, где я бы установил - я n00b для NH. Меня бросают, где я могу сделать «TestCheckBoxList = Test.Choice1 | Test.Choice3; ' –

Смежные вопросы