由于主键重复错误,无法将任何实体插入表中

时间:2019-05-16 14:01:55

标签: c# asp.net-core entity-framework-core

我上课

  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,但在这里看不到我做错了。

这是我的表在SQL Server中的外观:enter image description here

1 个答案:

答案 0 :(得分:0)

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]完全必要吗?我认为,如果您取出ID并将ID标记为[Key],则Entity Framework应该会自动生成ID。否则,保留该批注意味着您必须手动手动设置主键。 (由于它是int,因此始终无需干预即可默认为0。)