C# 如何将枚举从数据库加载到MVC4模型?

C# 如何将枚举从数据库加载到MVC4模型?,c#,asp.net-mvc-4,enums,C#,Asp.net Mvc 4,Enums,MSSQL表的DDL脚本: 创建表UserProfile( UserId int-IDENTITY(1,1)不是NULL主键, 用户名nvarchar(56)不为空, 电子邮件varchar(50)不为空, 性别不能为空, 地址nvarchar(1000)空 ) 除了Gender之外,所有字段都从数据库中加载。它始终填充0。尽管枚举是从bytetype派生的,但存在明显的类型转换失败 如何以正确的方式加载enum并将其作为模型中的enum保存?我相信较新版本的EF非常支持它,所以我假设您使用的

MSSQL表的DDL脚本:

创建表UserProfile(
UserId int-IDENTITY(1,1)不是NULL主键,
用户名nvarchar(56)不为空,
电子邮件varchar(50)不为空,
性别不能为空,
地址nvarchar(1000)空
)
除了
Gender
之外,所有字段都从数据库中加载。它始终填充0。尽管枚举是从
byte
type派生的,但存在明显的类型转换失败


如何以正确的方式加载enum并将其作为模型中的enum保存?

我相信较新版本的EF非常支持它,所以我假设您使用的是较旧版本的EF。这不是最优雅的解决方案,但对于较旧的版本,您可以执行以下操作:

public enum UserGender: byte {
    Unknown = 0,
    Male = 1,
    Female = 2
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public UserGender Gender { get; set; }
    public string Address { get; set; }
}

您使用的是哪个版本的实体框架?Enum在最新版本中得到了很好的支持,但在以前的版本中存在问题。您是否尝试过从枚举中删除
字节
defination@Satpal:我不确定,但认为4.4.0.0运行时版本v4.0.30319您的db和c类型应该匹配,将其更改为
int
,而不是
byte
@Ehsan Sajjad:好的,我会试试,但
tinyint
是否等同于
byte
?这两个都是8位的,都是无符号的。如果我没有错的话,4.x版本中不支持枚举
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public int GenderID { get; set; }
    [NotMapped]
    public virtual UserGender Gender 
    {
        get
        {
             return (UserGender)GenderID;
        }
        set
        {
             GenderID = Convert.ToInt32(value);
        }
    }
    public string Address { get; set; }
}