Проблема с первым столбцом идентификаторов в базе данных EF Core - PullRequest
0 голосов
/ 20 января 2020

Я использую EF Core 3.1 с подходом на основе базы данных, использующим Linq-to-Entities, чтобы добавить новую сущность, но получаю следующую ошибку:

Невозможно вставить явное значение для столбца идентификации в таблице XXX, когда для IDENTITY_INSERT установлено значение OFF.

Я сгенерировал таблицы автоматически, поэтому тип столбца идентификатора int и по умолчанию установлен на 0. И я не могу установить его в NULL, потому что он не Nullable .

Я не хочу явно устанавливать значение, я просто хочу, чтобы оно автоматически увеличивалось, как и должно.

Вот мой код:

Person person =new Person()
{
     FirstName="Dan",
     Age=22
};
db.Persons.Add(person);
db.SaveChanges();

Класс Person (генерируется из базы данных):

public partial class Person
{
  public int ID { get; set; }
  public string FirstName { get; set; }
  public int Age { get; set; }
}

Заранее благодарен за любую помощь

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Вы должны добавить следующие атрибуты в определение класса:

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 Атрибут рассказывает о способе генерации ключа.

0 голосов
/ 20 января 2020

Вы должны сообщить EF Core, что ID - это , сгенерированный базой данных . Один из способов сделать это - использовать атрибут 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 включит значение свойства ID в команду INSERT

...