首页 > 解决方案 > EF Core 数据库优先标识列问题

问题描述

我正在使用 EF Core 3.1 和数据库优先方法,使用 Linq-to-Entities 添加新实体,但出现以下错误:

当 IDENTITY_INSERT 设置为 OFF 时,无法为表 XXX 中的标识列插入显式值。

我自动生成了表,所以 ID 列类型是 int 并且默认设置为 0。我不能将它设置为 NULL,因为它不是 Nullable。

我不想明确设置值,我只想让它自动增加。

这是我的代码:

Person person =new Person()
{
     FirstName="Dan",
     Age=22
};
db.Persons.Add(person);
db.SaveChanges();

类人(从数据库生成):

public partial class Person
{
  public int ID { get; set; }
  public string FirstName { get; set; }
  public int Age { get; set; }
}

提前感谢您的帮助

标签: c#ef-core-3.1

解决方案


您应该将下一个属性添加到您的类定义中:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
....
public partial class Person
{
  [Key]
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int ID { get; set; }

  public string FirstName { get; set; }
  public int Age { get; set; }
}

Key属性表示该字段应该是主键,DatabaseGenerated属性表示键生成方式。


推荐阅读