Дублирование ключевой ошибки, но не запись с теми же значениями, которые можно найти при вставке данных через LINQ

Я использую C # Linq для взаимодействия с базой данных MSSQL. У меня проблема, когда я когда-нибудь получаю сообщение об ошибке:

«Нарушение ограничения PRIMARY KEY« PK_clustered_key_name ». Невозможно вставить дубликат ключа в объект« dbo.table_name ». Оператор был прерван».

Когда я пытаюсь добавить информацию в базу данных. Когда возникает ошибка, я делаю SQL-запрос со значениями, которые я пытаюсь добавить, в MSSQL Management Studio, и, похоже, в таблице нет записи.

Поэтому мой вопрос заключается в том, что кто-нибудь знает, что может быть здесь. Далее следует дополнительная информация.

Код, который я запускаю (ошибка в SaveChanges ), выглядит следующим образом:

 table_name table_name_instance = new table_name(); ... fill in values of fps ... context.table_name.AddObject(fps); context.SaveChanges(); в table_name table_name_instance = new table_name(); ... fill in values of fps ... context.table_name.AddObject(fps); context.SaveChanges(); 

Я также добавил проверку, если значения col1, col2, col3, col3 уже существуют в базе данных, поэтому я определенно не буду добавлять повторяющиеся записи. Поскольку я не уверен, что добавление задерживается, и проверка возвращает, что дублирующаяся запись уже существует, я сохранил добавленные значения в локальном контейнере, а просто, чтобы быть уверенным, но я все еще получаю ошибку при вызове SaveChanges ().

Ниже приводится определение моей таблицы с кластеризованным ключом, для которого сообщается об ошибке. Col1 – col4 – это все Guid: s, которые являются внешними ключами для других таблиц.

 CREATE TABLE [dbo].[table_name]( [col1] [uniqueidentifier] NOT NULL, [col2] [uniqueidentifier] NOT NULL, [col3] [uniqueidentifier] NOT NULL, [col4] [uniqueidentifier] NOT NULL CONSTRAINT [PK_forbandsscenariokrav] PRIMARY KEY CLUSTERED ( [col1] ASC, [col2] ASC, [col3] ASC, [col4] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 

Я видел много похожих вопросов, но не нашел ответа, который, похоже, применим к моей ситуации.

Дополнительная информация, я использую MSSQL-сервер 2008 R2 под Win 7 64-bit, а также:

  • Microsoft SQL Server Management Studio 10.50.1600.1
  • Компоненты доступа к данным Microsoft (MDAC) 6.1.7601.17514
  • Microsoft MSXML 3.0 5.0 6.0
  • Microsoft Internet Explorer 8.0.7601.17514
  • Microsoft .NET Framework 2.0.50727.5448
  • Операционная система 6.1.7601

обновленный
Когда я вместо этого использую функцию Create следующим образом:

 table_name table_name_instance = Createtable_name(col_val, col2_val,...); context.table_name.AddObject(fps); context.SaveChanges(); в table_name table_name_instance = Createtable_name(col_val, col2_val,...); context.table_name.AddObject(fps); context.SaveChanges(); 

Кажется, все работает отлично. Означает ли это какой-либо намек на то, почему мое первое решение с новым не работало, даже если я заполнил каждое значение столбца, не принимая значение null со значением?

Посмотрите, работает ли этот оператор SQL на вашем SQL Server

 INSERT INTO [dbo].[table_name] ([col1] ,[col2] ,[col3] ,[col4]) VALUES (NEWID(), NEWID(), NEWID(), NEWID()) GO 

Если это так, то это означает, что Guid, созданный вами из вашего приложения, дублирует. Прежде чем вставлять данные в свою базу данных, проверьте, существует ли в таблице первичный ключ, который вы хотите вставить. Вы должны сделать это для каждого столбца, так как каждый столбец является ПК.

  • Использовать linq для итерации через большие таблицы БД
  • LINQ to SQL выбирает точную совпадающую запись от многих до многих таблиц
  • Entity Framework и группировка по неделям с установленным днем ​​начала недели
  • 'Недопустимое имя столбца ' в вложенном запросе linq
  • Эффективный способ поиска нескольких дат на идентификатор
  • сравнение кортежей в SQL Server с тернарной логической логикой
  • SQL, чтобы получить родительскую таблицу со ссылкой на себя
  • Как создать механизм поиска для моего приложения?
  • Как вы выполняете множественные внутренние соединения в Linq для объектов
  • Как использовать INCLUDE в Linq только для выбранных столбцов?
  • простой SQL-запрос к LinQ, я попытался, но еще не решил
  • Interesting Posts

    Преобразование CTE из Postgres в MSSQL

    t-sql присоединиться к запросу для просмотра

    используя CASE для выбора столбца для SET в инструкции UPDATE В SQL SERVER

    Получить правильный номер значения в SQL Server, используя подстроку

    Обработка нулевых значений и дубликатов записей в SQL Server

    Выполните поиск и замену на тысячи файлов Word, хранящихся в столбце varbinary базы данных SQL Server DB

    Доступны ли все DTU для выполнения запроса?

    Если первичные ключи всегда назначаются кластеризованным индексом

    Каков математический способ вычисления PERCENT_RANK (), CUME_DIST (), PERCENTILE_CONT () и PERCENTILE_DISC ()

    SQL-сервер медленно выбирает запрос из типа varbinary (max)

    вызов sql из пользовательской функции

    Есть ли метаданные, которые я могу прочитать из SQL Server, чтобы узнать последнюю измененную строку / таблицу?

    Каков наилучший метод проверки наличия файла из хранимой процедуры SQL Server 2005?

    T-SQL Запрос таблицы матриц для свободного места

    читать таблицы MSSQL в порядке диска

    Давайте будем гением компьютера.