Нарушение уникального индекса - PullRequest
0 голосов
/ 15 января 2019

У меня есть таблица со следующей структурой:

    CREATE TABLE [dbo].[Photos](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [OriginalUrl] [nvarchar](450) NOT NULL,
    [ObjCode] [nvarchar](10) NOT NULL,
    [ProviderCode] [int] NOT NULL,
    [ImageId] [int] NOT NULL

и один из индексов:

   CREATE UNIQUE NONCLUSTERED INDEX [IX_Photos_ObjCode_ProvCode_ImageId] ON 
[dbo].[Photos]
(
    [ObjCode] ASC,
    [ProviderCode] ASC,
    [ImageId] ASC
)

Общая архитектура:

  • web api - отвечает за обработку входящего запроса и возврат данных, хранящихся в базе данных, или отправку запросов в очередь, если данных нет

  • 60 экземпляров обработчиков, которые потребляют очередь, обрабатывают запросы и сохраняют данные в дБ

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

Произошла ошибка при обновлении записей. Смотрите внутреннее исключение для деталей. Невозможно вставить повторяющуюся строку ключа в объект 'dbo.Photos' с уникальным индексом 'IX_Photos_ObjCode_ProvCode_ImageId'. Дубликат значения ключа (ART345, 2625, 0).

при попытке вставить набор элементов с разными параметрами, например, «PKM6778,8976,0» (ObjCode, ProvCode, ImageId)

Невозможно воспроизвести эту ошибку во время отладки или работы с одним экземпляром обработчика. Журналы также показывают, что ни один из наборов не содержит элементов, которые могли бы нарушить этот индекс

Стек: asp .net core 2.2, EF Core 2.0, MSSQL 2008

1 Ответ

0 голосов
/ 15 января 2019

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

...