Свойство "BookId" типа объекта "Библиотека" имеет временное значение. Либо установите постоянное значение явно, либо убедитесь, что база данных

Когда я использую Entity Framework Core и начальные данные с миграцией, у меня появляется эта ошибка:

Свойство "BookId" типа объекта "Библиотека" имеет временное значение. Либо задайте постоянное значение явно, либо убедитесь, что база данных настроена для генерации значений для этого свойства.

3 ответа

Решение

Сообщение означает, что вы указали значение для своего ключа, который не существовал, если у вас есть зависимости с ForeignKey.

У меня было такое же исключение, когда у меня был уникальный индекс, AddRange не удалось выполнить уникальный индекс, а затем внутри блока исключения catch была попытка удалить всю вставленную коллекцию. (Не мой код, но мне пришлось его исправить:-))

Пример кода (упрощенный):

try {
    context.AddRange(users); // List<User>, has property List<Contact>
    context.SaveChanges(); // throws exception on unique index
} catch (Exception ex) {
    context.RemoveRange(users); // this throws exception "The property 'UserID' on entity type 'Contact' has a temporary value"
    throw;
}

Сообщение об ошибке может ввести в заблуждение и создать путаницу, сначала я подумал, что это из-за настройки базы данных.

Я столкнулся с этой ошибкой, когда (по ошибке) дважды добавил один и тот же объект в список, обновил диапазон контекста с добавленными / измененными значениями и сохранил обратно в базу данных:

Например:

      list = _context.SomeList.ToList();

var obj = new Obj();
list.Add(obj);
 .......
list.Add(obj); //<- second add of the same object
 .......
_context.UpdateRange(list);
_context.SaveChanges(); //<- error