2016-05-01 75 views
2
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腳本:如何從數據庫中將枚舉加載到MVC4模型?

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類型派生的,但存在明顯的類型轉換失敗。

如何加載enum正確的方式,並保持它在模型枚舉?

+0

您正在使用哪個版本的實體框架? Enum在最新版本中得到了很好的支持,但它是以前版本的問題。你有沒有嘗試從枚舉定義中刪除'字節' – Satpal

+0

@Satpal:我不確定,但認爲4.4.0.0,運行時版本v4.0.30319 – Paul

+0

你的db和c#類型應該匹配,將它改爲「int」而不是' 'byte'' –

回答

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; } 
} 
相關問題