【问题标题】:Unique index violation唯一索引违规
【发布时间】:2019-01-15 06:04:12
【问题描述】:

我有一个结构如下的表:

    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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2023-03-16
      • 1970-01-01
      • 2018-01-10
      • 2015-11-03
      相关资源
      最近更新 更多