Невозможно вставить какие-либо объекты в таблицу из-за ошибки дублирования первичного ключа - PullRequest
0 голосов
/ 16 мая 2019

У меня есть класс

  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();

Но когда я пытаюсь сохранить, я получаю следующую ошибку

Экземпляр типа сущности «Персона» не может быть отслежен, потому что другой экземпляр с тем же значением ключа для {'Id'} уже отслеживается. При подключении существующих объектов убедитесь, что только один экземпляр объекта с данным значением ключа прилагается. Рассмотреть возможность использования 'DbContextOptionsBuilder.EnableSensitiveDataLogging', чтобы увидеть конфликтующие ключевые значения.

Я проверил обоих людей после их создания. Их идентификатор был установлен на 0 в обоих случаях. Естественно, их идентификаторы конфликтуют. Я хочу вставить этих двух людей и сделать так, чтобы их идентификатор был автоматически сгенерирован, но я не вижу, что я делаю здесь неправильно.

Вот так выглядит моя таблица на сервере SQL: enter image description here

1 Ответ

0 голосов
/ 16 мая 2019

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] совершенно необходимо? Я думаю, что Entity Framework должен обработать автогенерацию идентификатора, если вы уберете это и просто отметите Id [Key]. В противном случае, оставив эту аннотацию, вы сможете вручную установить первичный ключ вручную. (Поскольку это int, по умолчанию он всегда будет равен 0 без вмешательства.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...