Проблема со вставкой записи и назначением первичного ключа EF Core 3.0 - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть простая запись модели с ключом "Id", которую я добавляю в EF Entity. Он работал через Core 2.1, но теперь дает сбой с ошибкой:

SqlException: Cannot insert explicit value for identity column in table 'SpeakerRecs' when IDENTITY_INSERT is set to OFF.

Модель определяется следующим образом:

namespace WebAppCore.Models
{
    public class SpeakerRec
    {
        [Key]
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string ImageUrl { get; set; }
    }
}

Это код, который выполняет вставку, и он не работает навызов сохранения изменений.

        foreach (var speaker in speakerRecs)
        {
            _context.SpeakerRecs.Add(speaker);
        }
        _context.SaveChanges();

Я вижу заметки о критических изменениях в Core 3, и проблема как-то связана с ValueGeneratedNever(), но не могу понять. Я не использовал EF некоторое время и не планировал переучивать его. Я надеялся, что мой старый код продолжит работать.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Если вы хотите вручную вставить Id, вы можете использовать [DatabaseGenerated(DatabaseGeneratedOption.None)]. Опция None предотвращает автоматическое создание значений базой данных в тех случаях, когда они были бы созданы в противном случае:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }

Если вы создали миграцию ранее, при создании новой миграции и обновлении базы данных вы можетеполучить исключение, например To change the IDENTITY property of a column, the column needs to be dropped and recreated, вы можете:

  1. Удалить фактическую базу данных
  2. Удалить папку Migrations в вашем проекте и очистить проект
  3. Создатьновая миграция с dd-migration <migration_name> в консоли диспетчера пакетов, а затем Update-database.
0 голосов
/ 02 ноября 2019

Вы вставляете явные значения в столбец Id , который является столбцом идентификаторов. Чтобы явно вставить значение в столбец идентификаторов, необходимо включить вставку идентификаторов .

Если ваша база данных автоматически вставляет значение для столбца Id , вы не должны указывать их извне из своего кода.

Обновите файл edmx, чтобы отразить любые изменения, которые вы, возможно, внесли в базу данных. Если база данных автоматически присваивает значение, вы должны увидеть атрибут «IsDbGenerated = true» в файле конструктора под этим свойством. Если его там нет, вы можете добавить его вручную.

Ссылка

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