2013-03-05 4 views
0

В нашей системе мы используем nhibernate для отображения объектов в базу данных. В одном из наших объектов мы имеем поле, которое представлено в виде перечисления (перечисление с ключом и значением, феnumernate map enum pair (key-value)

public enum Status 
    { 
     Draft = 0, 
     Archived = 1, 
     Imported = 2 
    } 

)

Таким образом, в нашем приложении мы столкнулись с проблемой сортировки объектов с тем, что поле, которое представлено перечислением: сортировка производится не ключом перечисления, а значением. Для фиксации этой проблемы мы создали addtive поле в базе данных для строки ключа перечисления и внесены изменения в nhibenate файл модель:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <typedef name="StatusName" class="NHibernate.Type.EnumStringType`1[[Code.Model.Status, Code.Model]], NHibernate" /> 
... 
<property name="Status" type="StatusName" column="StatusName" not-null="true" /> 
... 

После этого изменения сортировки начали работать правильно в приложении (записи сортируются по ключу перечислений), но после того, как для создания новых объектов в базе данных сохраняется значение только для ключа enum (поле StatusName), а для значения enum (поле состояния) оно не сохраняется.

Есть ли способ сопоставить ключ и значение перечислимого числа в столбцах базы данных (столбцы состояния и состояния) с помощью конфигураций nhibernate?

ответ

0

Я не уверен, правильно ли я понял ваш вопрос. Он считает, что вы хотите сохранить как имя значения enum, так и его числовое значение в базе данных в двух разных столбцах.

Прежде чем это сделать, убедитесь, что вы действительно этого хотите. Это избыточность. Увольнения всегда сложны, чтобы оставаться последовательными и обычно вызывают больше проблем по мере их решения.

Чтобы реализовать его, вам необходимо написать составной custom type, который может хранить значение свойства для нескольких столбцов.

В сети есть несколько примеров, например. here или here.

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