如何正确设置Enum值?

时间:2015-03-18 11:46:45

标签: c# nhibernate enums

我有一个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。它们正在工作,它们完全按照{ {1}})。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我映射enum的方式是这样的:

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

MyNamespaceMyLib应该替换为您自己的...... NHibernate将能够使用正确的enum值初始化此类属性

然后可以像这样映射Enum属性:

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

因为NHibernate将为任何加载的值提供实例化的enum