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
类型,但是存在明显的类型转换失败。
如何以正确的方式加载枚举并将其作为模型中的枚举?
答案 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; }
}