EF Core 数据库优先标识列问题

EF Core database-first identity column issue

我将 EF Core 3.1 与使用 Linq-to-Entities 的数据库优先方法一起使用以添加新实体,但出现以下错误:

Cannot insert explicit value for identity column in table XXX when IDENTITY_INSERT is set to OFF.

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

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

这是我的代码:

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

Class 人(从数据库生成):

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

提前感谢您的帮助

您应该告诉 EF Core IDgenerated by the database. One way to do this is with the DatabaseGenerated 属性,例如:

public partial class Person
{
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int ID { get; set; }
  public string FirstName { get; set; }
  public int Age { get; set; }
}

DatabaseGeneratedOption.Identity 选项告诉 EF Core 数据库在插入记录时生成新值。如果没有这个,EF Core 将在 INSERT 命令

中包含 ID 属性 的值

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

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 属性说明密钥生成方式。