Нарушение ограничения PRIMARY KEY Невозможно вставить дубликат ключа в объект.В C # .net .... Visual Studio 2010 ... Framework 3.5 - PullRequest
0 голосов
/ 17 августа 2010

Я занимаюсь разработкой небольшого приложения для Windows на C # .net в Visual Studio 2010 с фреймворком 3.5.Я использую LinqToSql для работы с базой данных.

имя таблицы: cprofile

Поля таблицы:

custid                int (primary key),
custname              varchar(50),
address               nvarchar(MAX),
mobileno              nchar(10) 

Поэтому я изменил свойство 'Is identity' *От 1009 * до 'yes'.Он автоматически изменяет 2 других под-свойства.

Identity Increment =   1
Identity Seed  =      1,

После внесения этих изменений в таблицу выдается ошибка при попытке сохранить новую запись.

"Невозможновставить явное значение для столбца идентификаторов в таблицу 'cprofile', когда для IDENTITY_INSERT задано значение OFF. "

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Не слишком знаком с L2S, но я бы сказал, что Даниэль прав: обновите вашу модель (обычно где-нибудь в контекстном меню) из БД. Это должно помешать ему попытаться вставить значение в столбец идентификатора с автоинкрементом.

Я полагаю, что может быть способ установить IDENTIY_INSERT ON, но я настоятельно рекомендую против этого.

Если ваша таблица не должна отвечать за установку CustomerId (скажем, у компании есть какой-то метод такого определения (особенно нелинейным образом), оставьте свой столбец Customer Id как PK, но удалите Identity Спецификация из колонки.

0 голосов
/ 17 августа 2010

Если вы пытаетесь использовать тот же оператор вставки, который вы использовали ранее, вы больше не можете это делать.Я не уверен, как это делается на стороне C #, но в SQL вам придется запускать операторы, чтобы включить identity_insert, а затем запускать оператор.Поскольку вы изменили столбец на идентификатор, таблица гарантирует, что следующая запись всегда на 1 номер выше предыдущей.Из-за этого вы не можете просто вставить значения в него.Если вы хотите, чтобы таблица создала для вас значение идентификатора, просто удалите его.Если мое объяснение не поможет, надеюсь, это поможет.

Определение таблицы (Table1) Col1 Identity Col2 varchar (50) Col3 bool

Вставьте оператор перед идентификатором INSERT INTO Table1 VALUES (1, 'Test ', TRUE)

Вставить оператор после идентификатора INSERT INTO Table1 VALUES (' Test ', TRUE)

Когда идентификация включена, вы не можете указать значение, не включив identity_edit.Я посмотрю, смогу ли я найти, как это сделать в Linq.

РЕДАКТИРОВАТЬ: Мне также нравится то, что сказал Даниэль.Не думал об этом.

...