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 ID
是 generated 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 属性说明密钥生成方式。
我将 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 ID
是 generated 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 属性说明密钥生成方式。