当我尝试填充上下文对象并立即保存/插入所有记录时,我收到以下错误。
{“违反PRIMARY KEY约束'PK_ T8 _2D83E3D3'。无法在对象'dbo.T8'中插入重复键。重复键值为(AWLS0757043072)。\ r \ n语句具有已被终止。“}
var proxy = new AREntities();
foreach (var a in b)
{
..........
proxy.AddtoXYZ(data); //Please note 'data' inside foreach loop is different at all times. I am not adding same record multiple times.
}
proxy.SaveChanges();
但是如果我为每条记录创建上下文然后将该记录插入/保存到db中,它就可以正常工作。见下文。
foreach (var a in b)
{
..........
var proxy = new AREntities();
proxy.AddtoXYZ(data);
proxy.SaveChanges();
}
但是上面的代码显然会破坏性能。我试图诊断为什么我在方案1中得到错误。有什么想法吗?
这是关键约束的定义。
ALTER TABLE [dbo].[T8] ADD PRIMARY KEY CLUSTERED
(
[C1] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
答案 0 :(得分:0)
在第一个示例中,您多次添加同一个实体,并且主键值重复,因此导致错误。你正在做的第二种方式是正确的。仅在循环完成后调用保存更改,不会对性能产生影响。