Ошибка Linq to sql с полем приращения идентификатора
-
21-08-2019 - |
Вопрос
Я только начал использовать linq to sql и столкнулся с проблемой вставки записи с автоматически увеличивающимся полем.
Я создал новый экземпляр объекта компании, определенного linq.он инициализировал поле автоматического увеличения «companyID» значением 0.InsertOnSubmit() завершается сбоем из-за следующего исключения validOperationException.
Неправильная спецификация автосинх
атрибут столбца IsDbGenerated имеет значение true для свойства CompanyID.Я использую SQL-сервер 2000.
Редактировать:Для автосинхронизации установлено значение OnIsert.Тип данных — BigInt в TSQL, long в C#.
Кто-нибудь знает, почему возникает эта ошибка и как ее можно решить?
Спасибо
Решение
Нашел ответ.Это было связано с первичными ключами.В дизайнере linq первичные ключи были настроены так, как и должно быть.В базе данных соответствующие поля не были установлены в качестве первичных ключей.Я исправил ключи в базе данных, и это решило проблему.
Другие советы
Каков тип данных?инт?(int как в TSQL, так и в C#?)
Какая у вас настройка автосинхронизации?Для первичного ключа это должно быть «OnInsert».
Та же проблема.Установка первичного ключа в БД и изменение свойства AutoSync на "OnInsert"
На DBML помог
Каково значение свойства «Автосинхронизация» в этом классе/таблице?
Я только что проверил на своей стороне, и там установлено значение «OnInsert».Также для параметра «Автогенерируемое значение» установлено значение true.
Опция «При вставке» устанавливается только при вставке значений в базу данных.Если у вас нет проблем с параметром безопасности базы данных, всегда используйте параметр «Никогда» в базе данных.
Если это возможно, удалите базу данных и создайте заново.Мой случай был, когда я забыл добавить первичный ключ в таблицу.Затем, после того как первая вставка вошла в базу данных, я получил сообщение об отсутствии первичного ключа.Я применил это вручную в дизайнере dbml, но первый идентификатор уже был занят, что вызвало исключение «Неверная автосинхронизация».