У меня есть проект .NET Core 2.0, который использует базу данных Postgres, которую я использую EntityFrameworkCore.PostgreSQL (2.0.1), которая вставляет странное значение для моего идентификатора таблицы.
Кажется, это происходит случайно и, похоже, полностью игнорирует мою идентификационную последовательность.
Он вставляет наименьшее значение int32 -2147482647 в качестве идентификатора вставляемой строки. Тогда все будущие вставки не могут произойти, и это вызывает эту ошибку:
Экземпляр типа сущности «Объект» не может быть отслежен, поскольку другой экземпляр с таким же значением ключа для {'Id'} уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа. Рассмотрите возможность использования DbContextOptionsBuilder.EnableSensitiveDataLogging для просмотра конфликтующих значений ключей.
Перед сохранением Entity я знаю, что он использует идентификатор мусора, который, как я полагаю, является отрицательным, но, насколько я понимаю, при сохранении этот идентификатор должен быть обновлен в соответствии с вашей последовательностью. И похоже, что будущие вставки также получают тот же идентификатор мусора, который вызывает ошибку, которую я получаю.
Интересно, была ли у кого-нибудь еще эта проблема, и если да, то в чем причина.


Поздний ответ, но для других, которые находят этот вопрос: Да, я видел это, и в сочетании с базой данных EF Core + PostgreSQL. Убедитесь, что значение последовательности в вашем основном столбце правильное! Для нас «текущее значение» было как-то неправильно выставлено так, чтобы следующее попало по уже существующему id.
Я думаю, что здесь происходит то, что это рассматривается как специальное значение для новых строк, но оно предоставляется пользователю, когда новая строка не может быть вставлена по причинам, связанным с базой данных. Я не думаю, что это обычно проблемы Entity Framework Core.