List 类型的EF属性未在db中创建

我正在使用代码EF开发一个ASP.NET MVC5应用程序。 我的代码:

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 Languages { get; set; } public Person() { Languages = new List(); } } 

在VS 2013中的包管理器控制台中构建应用程序和Update-Database之后,我找不到Persons语言的参考表。 我认为应该创建一个名为Person_Languages (或类似)的PersonIDLanguageID 。 我错了或错过了什么?

我无法清楚地引用我的回答,但是:枚举不是一个类,所以它不能是一个实体。

在这种情况下,您必须创建一个语言类:

 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 Languages { get; set; } public Person() { Languages = new List(); } } 

请注意使用ICollection而不是List来遵守法规。

您可能还希望将enum属性用作PK。

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

使用Flag Enum。 你不需要任何额外的表。 它要快得多。

在你的模型中你可以做到

 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/