EF - Сохранить изменения - Как исправить ограничение НАРУШЕНИЕ ПЕРВИЧНОГО КЛЮЧА - PullRequest
0 голосов
/ 29 мая 2019

Я использую Entity Framework для добавления данных в таблицу в sql.У меня есть ниже класс и метод, чтобы добавить новые записи.Но я получаю следующее сообщение об ошибке.

SqlException: Нарушение ограничения PRIMARY KEY 'PK__Users__3214EC27E90BFE7E'.Невозможно вставить дубликат ключа в объект 'dbo.Users'.Дубликат значения ключа (0).Оператор был прерван.

public partial class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    public string Name { get; set; }

    public string Surname { get; set; }

}        


    public void InsertUser(MyEvent e)
    {
        using (var db = CreateInstance())
        {
            var users = db.Set<User>();
            users.Add(new User
            {
                Name= e.Name,
                Surname= e.Surname                    
            });
            db.SaveChanges();
         }
      }

Как EF может автоматически увеличивать идентификатор в таблице?

Ответы [ 2 ]

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

Это должен быть сам SQL-сервер, увеличивающий PK, а не EF. Если у вас есть несколько клиентов EF, вставляющих данные в БД одновременно, было бы трудно обеспечить правильное увеличение PK. С SQL это намного проще, все, что вам нужно сделать, это установить столбец PK в качестве идентификатора с автоинкрементами.

Если в столбце PK указан row_id, вы можете определить его следующим образом с помощью скриптов:

[row_id] [int] IDENTITY(1,1) NOT NULL

Или, если вы создаете таблицу с помощью конструктора SSMS, то в свойствах столбца задайте Identity Specification как:

Is Identity = Yes
Identity Increment = 1
Identity Seed = 1
0 голосов
/ 29 мая 2019

Удалите DB и просто определите как:

public int Id { get; set; }

без каких-либо аннотаций данных

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