我有一个 Person 实体类型,如下所示:
public partial class Person
{
public int PersonID { get; set; }
public byte Gender { get; set; }
public string IDNumber { get; set; }
}
当我为了将他保存到数据库而创建一个新 Person 时,主键 PersonID 设置为 0,而不是 null。
编码:
var theNewGuy = new MyEntities.Person();
在这一行之后,theNewGuy.PersonID = 0。问题是,我如何告诉它插入一个新的 Person 并为其分配下一个可用的主键?显然,我不希望它为 0,但数据库中已经有一个 PersonID = 0;
保存代码:
Velo.People.Add(theNewGuy);
Velo.SaveChanges();//throws error
抛出异常:
违反 PRIMARY KEY 约束“PK_PERSON”。无法在对象“dbo.Person”中插入重复键。重复的键值为 (0)。
该语句已终止。
最佳答案
主键不能为 Null。 PK 必须是唯一的,而 Null 不是。另外,int
不是可以为空的类型,所以它的默认值为 0。
EntityFramework 应该能够找出 PersonID
是 Person
的键,但以防万一尝试粘贴 [Key]
属性就在那里。此外,您可以将其强制为 auto increment
列添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
归因于您的 PersonID
属性(property)。
关于c# - 实体的主键字段设置为 0 而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106055/