我上课
public partial class Person
{
public Person()
{
JobNavigation = new HashSet<Job>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Job> JobNavigation { get; set; }
}
我正在尝试创建两个新人并将其插入数据库中
var newPerson1 = new Person()
{
Name = "test"
};
var newPerson2 = new Person()
{
Name = "test2"
};
context.Person.Add(newPerson1);
context.Person.Add(newPerson2);
context.SaveChanges();
但是当我尝试保存时,出现以下错误
无法跟踪实体类型“ Person”的实例,因为另一个 具有与{'Id'}相同的键值的实例已被跟踪。 附加现有实体时,请确保只有一个实体实例 具有给定键值的附件。考虑使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging'以查看 冲突的键值。
创建后,我检查了两个人。在两种情况下,其ID均设置为0。因此,他们的身份证自然会发生冲突。我想插入这两个人并自动生成他们的ID,但在这里看不到我做错了。
答案 0 :(得分:0)
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
完全必要吗?我认为,如果您取出ID并将ID标记为[Key]
,则Entity Framework应该会自动生成ID。否则,保留该批注意味着您必须手动手动设置主键。 (由于它是int
,因此始终无需干预即可默认为0。)