我正在使用EF Core 3.1和数据库优先方法使用Linq-to-Entities添加新实体,但是出现以下错误:
当 IDENTITY_INSERT 设置为 OFF 时,无法插入表 XXX 中标识列的显式值。
我自动生成了表,因此 ID 列类型为 int 并默认设置为 0.并且我无法将其设置为 NULL,因为它不可为 Null。
我不想明确设置值,我只想让它按预期自动增加。
这是我的代码:
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; }
}
提前感谢任何帮助
您应该将下一个属性添加到类定义中:
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; }
}
键属性表示字段应为主键, 和 数据库生成 属性告诉密钥生成方式。
应告知 EF CoreID
是由数据库生成的。一种方法是使用 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
属性的值