2015-03-18 4 views
-1

У меня есть Enum:Как правильно установить значение Enum?

[DataContract(Namespace = Namespace.Default)] 
public enum CancelledStatus 
{ 
    [EnumMember] 
    NotCancelled = 0, 

    [EnumMember] 
    CancelRequestBySystem = 1, 

    [EnumMember] 
    CancelRequestByUser = 2, 

    [EnumMember] 
    Cancelled = 3 
} 

И в нескольких местах у меня есть вторая вещь в классах:

[DataMember] 
    public virtual int CancelledStatusId { get; set; } 

    [DataMember] 
    public virtual CancelledStatus Cancelled 
    { 
     get 
     { 
      return (CancelledStatus)this.CancelledStatusId; 
     } 

     set 
     { 
      this.CancelledStatusId = (int)value; 
     } 
    } 

Это сделано, чтобы написать INT значение перечисления в базе данных (с помощью NHibernate).

<property name="CancelledStatusId" column="CancelledStatus"/> 

МОЯ ПРОБЛЕМА в том, что я могу записать данные в базу данных, НО я не могу получить его оттуда, потому что я начал получать ошибки:

The type 'SpecialEntities.CancelledStatus' has no settable properties. 

я могу получить данные из база данных IF Я удаляю set от CancelledStatus Cancelled, но если я это сделаю, я не могу записать данные в базу данных.

Независимо от того, как я смотрю на это, я не могу найти причину этой проблемы вообще, и я не могу ее понять (у меня есть severan Enum для разных таблиц и классов. Они работают, и они выполняются точно так же, как и CancelledStatus).

Что я делаю неправильно?

ответ

0

Как я карта enum как это:

// the integer 
<property name="CancelledStatusId" column="CancelledStatus"/> 
// the enum 
<property name="Cancelled" column="CancelledStatus" 
    type="MyNamespace.CancelledStatus, MyLib" 
    insert="false" update="false" /> 

Где MyNamespace и MyLib следует заменить самостоятельно ... NHibernate сможет инициализировать такое свойство с правильным значением enum

Свойство Enum можно было бы следующим образом:

[DataMember] 
public virtual CancelledStatus Cancelled { get; set } 

Becuase NHibern ate будет любое загруженное значение предоставить с помощью экземпляра enum

+0

И что он будет хранить в базе данных? Значение int или строка? В любом случае ... проблема с типом «SpecialEntities.CancelledStatus» не имеет настраиваемых свойств. - все равно беспокоить меня много, не могу понять, почему это появилось. –

+0

Олег Я расширил свой ответ ... мы можем отобразить как 1) целое число, так и 2) перечисление. Один из этих значений ДОЛЖЕН быть только в режиме чтения. * (это зависит от вас, но один msut имеет 'insert =" false "update =" false "') * Таким образом, мы можем получить от DB * (NHibernate сделает это) * оба значения загружены и подготовлены для нас. При создании сущности * (той, которая редактируется путем сопоставления) требуется только одно значение. * Помогает ли это? –

+0

Момент в том, что мне не нужно хранить Enum в базе данных, и его Id уже хранится как int. Проблема в том, что по какой-то причине int не преобразуется в Enum, и в результате я получаю Type 'SpecialEntities.CancelledStatus' не имеет устанавливаемых свойств. (по мере того как я вижу). И, как я уже сказал, у меня есть несколько Enum, которые работают и выглядят точно так же, как этот, но только это дает мне ошибку для свойства set –

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