2015-02-10 61 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/