C# 要在POCO EF中枚举的类型表

C# 要在POCO EF中枚举的类型表,c#,entity-framework,entity-framework-4,enums,poco,C#,Entity Framework,Entity Framework 4,Enums,Poco,嗨,我是POCO的新手,我想知道是否可以将表映射为枚举。看看我的简单图表: 表UserType表示类型列表,非常类似于C#code中的枚举类型。所以我想生成一个属性类型为enum的类 大概是这样的: [Table("User")] public class User { public int UserId { get; set; } public string Name { get; set; } [ForeignKey("???")] public Use

嗨,我是POCO的新手,我想知道是否可以将表映射为枚举。看看我的简单图表:

UserType
表示类型列表,非常类似于C#code中的枚举类型。所以我想生成一个属性类型为enum的类

大概是这样的:

[Table("User")]
public class User
{
    public int UserId { get; set; }

    public string Name { get; set; }

    [ForeignKey("???")]
    public UserType Type { get; set; }
}

[Table("UserType")]
public enum UserType
{
    [Description("Administrator")]
    Administrator = 1,

    [Description("Operator")]
    Operator = 2,

    [Description("Consultor")]
    Consultor = 3
}
可以用这样的代码映射表吗?

*ps:此代码不正确,这只是试图解释我的问题的一种方式。

不,这是不可能的。实体应为引用类型(枚举为值类型),且应具有id属性。枚举只是一组命名常量。没有id属性

解决方法-您可以将整数值保存在表
User
中,该表可以映射到您的枚举:

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public UserType Type { get; set; }
}

public enum UserType
{
    Administrator = 1,
    Operator = 2,
    Consultor = 3
}
如果您使用的是EF 4,则应在用户类中创建用于映射到数据库列的integer属性,以及未映射但通过integer属性计算的enum属性:

[Column("UserType")]
public int UserTypeValue { get; set; }

[NotMapped]
public UserType Type
{
  get { return (UserType) UserTypeValue;
  set { UserTypeValue = (int)value;
}