C# 如何正确设置枚举值?

C# 如何正确设置枚举值?,c#,nhibernate,enums,C#,Nhibernate,Enums,我有一个枚举: [DataContract(Namespace = Namespace.Default)] public enum CancelledStatus { [EnumMember] NotCancelled = 0, [EnumMember] CancelRequestBySystem = 1, [EnumMember] CancelRequestByUser = 2, [EnumMember] Cancelled

我有一个枚举:

[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帮助)

如果我从
取消状态
中删除
设置
,我可以从数据库接收数据,但如果我这样做,我无法将数据写入数据库

不管我怎么看,我根本找不到这个问题的原因,也无法理解它(我为不同的表和类提供了几个枚举。它们正在工作,并且完全按照
canceledstatus
的方式完成)


我做错了什么?

我映射
enum
的方式如下:

// the integer
<property name="CancelledStatusId" column="CancelledStatus"/>
// the enum
<property name="Cancelled" column="CancelledStatus" 
    type="MyNamespace.CancelledStatus, MyLib"
    insert="false" update="false"  />
[DataMember]
public virtual CancelledStatus Cancelled { get; set }

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

以及它将存储在数据库中的内容吗?整数值还是字符串?无论如何类型“Specialitys.CancelledStatus”的问题没有可设置的属性。-还是很困扰我,我不能理解它为什么会出现。奥列格我扩展了我的答案。。。我们可以映射1)整数和2)枚举。其中一个值必须为只读。(这取决于您,但是一个msut有
insert=“false”update=“false”
)这样我们可以从DB(NHibernate将这样做)获得为我们加载和准备的两个值。当我们创建实体(通过映射可编辑的实体)时,只需要一个值,这有帮助吗?现在我不需要在数据库中存储枚举,并且它的Id已经存储为int。问题是由于某种原因int没有转换为Enum,因此我得到的类型“Specialitys.CancelledStatus”没有可设置的属性。(至少如我所见)。正如我已经说过的,我有几个枚举,它们的工作原理和外观与这个完全相同,但只有这给了我一个集合属性的错误。我更新了answser,并建议——让NHibernate来完成。不要用C#来解决这个问题。只需为新实体设置整数值,对于任何加载的值,都将得到这两个值。但是,如果加载的值存在问题,并且它转换为enum==时,整数值与该enum不相关!检查你的数据库。也许你的映射-整数应该是只读的,枚举是可编辑的。这样您就可以确定,您已经提供了现有的枚举值。。。这有用吗?
// the integer
<property name="CancelledStatusId" column="CancelledStatus"/>
// the enum
<property name="Cancelled" column="CancelledStatus" 
    type="MyNamespace.CancelledStatus, MyLib"
    insert="false" update="false"  />
[DataMember]
public virtual CancelledStatus Cancelled { get; set }