使用代码首先实体框架添加标识字段

时间:2014-10-28 18:33:28

标签: code-first auto-increment

这是我在MVC项目中使用的模型类Employee

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

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int EmployeeID { get; set; }

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    public int SkillID { get; set; }

    [Display(Name="Employee Skill")]
    public Skill EmployeeSkill { get; set; }

    public virtual List<Skill> EmployeeSkills { get; set; }

}  

如您所见,我已将[DatabaseGenerated(DatabaseGeneratedOption.Identity)]属性添加到EmployeeID属性中。但是,当我尝试插入而未指定EmployeeID作为输入值时,我收到以下错误...

  

无法将值NULL插入“EmployeeID”列,表'MVCTheRightWayContext-20141028005000.dbo.Employees';列不允许空值。 INSERT失败。   该语句已终止。

2 个答案:

答案 0 :(得分:6)

您必须添加[Key]注释:

public class Employee
{
[Required]
public string Name { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EmployeeID { get; set; }

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

public int SkillID { get; set; }

[Display(Name="Employee Skill")]
public Skill EmployeeSkill { get; set; }

public virtual List<Skill> EmployeeSkills { get; set; }

} 

答案 1 :(得分:0)

如果存在“更智能”的方式,请对此答案发表评论。

我发现我无法将上述两个注释(Key和DatabaseGeneratedOption.Identity)应用于已经存在的现有字段。

首先,我需要通过删除实体模型来删除SQL中的表,然后在SQL中使用实体框架重新创建表,以便将我的字段标记为PK并设置身份规范。

希望这可以节省一些人抓头的时间。