2015-02-10 112 views
2

我正在開發使用代碼優先EF的asp.net mvc5應用程序。我的代碼:EF屬性類型列表<enum>未創建在分貝

public enum Language : byte 
     { 
      [Display(Name = "Turkmen")] 
      TKM = 1, 
      [Display(Name = "Russian")] 
      RUS = 2, 
      [Display(Name = "Chineese")] 
      CHN = 3, 
      [Display(Name = "English")] 
      ENG = 4 
     } 

而且我的模型類:

public class Person 
{ 
     [Key] 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]     
     public int PersonID 
     { 
      get; 
      set; 
     }  


     [Required]    
     public string Name { get; set; } 

     [Required]   
     public string Surname { get; set; } 

     public virtual List<Enums.Language> Languages 
     { 
      get; 
      set; 
     } 

     public Person() 
     { 
      Languages = new List<Enums.Language>();    
     } 
} 

後,我建立的應用程序和更新,數據庫在VS 2013包管理器控制檯我找不到人語言參考表。 我雖然應該創建一個名爲Person_Languages(或類似)PersonID和LanguageID的表。我錯了什麼或錯過了什麼?感謝您的時間!

+0

重複:http://stackoverflow.com/questions/18074737/listenum-in-aggregates-entityframework-codefirst 和:HTTP://計算器。 COM /問題/ 15045303/EF-5-codefirst-枚舉集合 - 不產生式數據庫 – kjbartel 2015-02-10 11:13:38

回答

4

我不能清楚地引用我的回答,但:枚舉不是一個類,所以不能成爲一個實體。

在你的情況下,你必須創建一個語言類:

public class CLanguage { 
    public Int32 Id {get; set;} 
    public Language Lang {get; set;} 
} 

然後:

public class Person 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]     
    public int PersonID 
    { 
     get; 
     set; 
    }  


    [Required]    
    public string Name { get; set; } 

    [Required]   
    public string Surname { get; set; } 

    public virtual ICollection<CLanguage> Languages 
    { 
     get; 
     set; 
    } 

    public Person() 
    { 
     Languages = new List<CLanguage>();    
    } 

}

請注意使用ICollection的,而不是名單遵守。

您可能還想使用枚舉屬性作爲PK。

public class CLanguage { 
    [Key]  
    public Language Lang {get; set;} 
} 
4

使用標誌枚舉。你不需要任何額外的表格。它要快得多。

在你的模型,你可以做

var person = new Person(); 
p.Languages.Add(Language.TKM); 
p.Languages.Add(Language.TKM); 

...這是不對的。隨着標誌,你會做這樣的

p.Languages = Language.TKM | Language.RUS; 

http://blog.falafel.com/entity-framework-enum-flags/