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

时间:2016-05-01 16:19:08

标签: c# asp.net-mvc-4 enums

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; }
}

MSSQL表的DDL脚本:

CREATE TABLE UserProfile(
    UserId   int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    UserName nvarchar(56) NOT NULL,
    Email    varchar(50) NOT NULL,
    Gender   tinyint NOT NULL,
    Address  nvarchar(1000) NULL
)

除了Gender之外,所有字段都是从数据库加载的。它始终填充为0.尽管枚举源自byte类型,但是存在明显的类型转换失败。

如何以正确的方式加载枚举并将其作为模型中的枚举?

1 个答案:

答案 0 :(得分:1)

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

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; }
}