唯一索引冲突

时间:2019-01-15 06:04:13

标签: sql-server-2008 asp.net-core entity-framework-core unique-index

我有一个具有以下结构的表:

    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个处理程序实例正在使用队列,正在处理请求并将数据存储在db中

当处理程序实例尝试插入不应该违反数据唯一性的数据时,我会遇到许多异常。例如,我得到以下错误:

  

更新条目时发生错误。有关详细信息,请参见内部异常。无法在具有唯一索引“ IX_Photos_ObjCode_ProvCode_ImageId”的对象“ dbo.Photos”中插入重复的键行。重复的键值为(ART345、2625、0)。

当我尝试插入具有不同参数的项目集时,例如“ PKM6778,8976,0”(ObjCode,ProvCode,ImageId)

在调试或使用单个处理程序实例时,不可能重现此错误。日志还显示,所有集合均未包含任何可能违反此索引的项目

堆栈:asp .net core 2.2,EF Core 2.0,MSSQL 2008

1 个答案:

答案 0 :(得分:0)

我认为您的处理程序代码中有错误,可能是某些变量不是线程安全的,例如,类级别而不是函数级别。您应该检查您的代码。