gpt4 book ai didi

c# - Entity Framework : Table with Composite Key issue : Violation of PRIMARY KEY constraint. 无法在对象中插入重复键

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:26 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 和 edmx & sql 数据库。

我有 3 个表:1)Product 2)Language 3)ProductDesc

现在 Product 表的 ProductID 和 Language 表的 LangID 用作 ProductDesc 中的外键,“ProductID + LangID”是 ProductDesc 表的组合键,ProductDesc 表还有 4 个其他 desc 列,都是 nvarchar。

现在当我插入/更新产品数据时,我正在 checkin 如果 ProductDesc 与 ProductID P1 和 LangID L1 一起存在,则代码返回 null 并且下一行代码尝试在 ProductDesc 中插入数据但给出错误违反 PRIMARY KEY 约束“PK_ProductDesc”。无法在对象 'dbo.ProductDesc' 中插入重复键,而表 ProductDesc 中没有包含 ProductID 和 LangID 组合的记录。

var pDesc = db.ProductDescs.FirstOrDefault(x => x.ProductID == ProductID && x.LangID == LangID);
if (pDesc == null)
{
pDesc = new ProductDesc();
pDesc.ProductID = ProductID;
pDesc.LangID = LangID;
db.ProductDescs.Add(pDesc);
}
db.SaveChanges();

当我从一个产品的 UI 插入/更新数据时,这工作正常。

但是当我对从 Windows 服务插入的批量数据使用相同的函数时,它会导致此错误。我的 Windows 服务从 azure 队列读取数据并调用相同的函数为每个产品插入数据。

从 Windows 服务大约 100 条记录成功插入,然后出现此问题

最佳答案

当您插入的数据中存在重复项时,您将遇到相同的主键冲突错误。

假设我有这样一张 table

CREATE TABLE TableA
(
Id INT PRIMARY KEY,
Name VARCHAR(25)
)

我正在插入一条 ID 为 1 的记录

INSERT INTO TableA
VALUES(1,'ABC')

它将被插入但是不是上面的,如果我尝试从同一个语句插入 2 个具有相同 ID 的记录,就像这样

INSERT INTO TableA
VALUES(1,'ABC'),(1,'XYZ')

它将给我主键冲突错误并且不会在表中显示任何现有记录。

因此请确保您的输入数据中没有重复项

关于c# - Entity Framework : Table with Composite Key issue : Violation of PRIMARY KEY constraint. 无法在对象中插入重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48294718/

25 4 0