Я использую 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();
Я также добавил проверку, если значения 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 server 2008 R2 под Win 7 64-bit, а также:
- Microsoft SQL Server Management Studio 10.50.1600.1
- Компоненты Microsoft Data Access (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();
Кажется, она работает просто отлично.Дает ли это намек на то, что мое первое решение с новым не работало, даже если я заполнил каждое значение столбца, не принимая ноль со значением?