删除条目时“无法在对象中插入重复键”

时间:2013-06-25 15:25:23

标签: c# sql linq-to-sql

我知道这听起来很荒谬,但我一直在收到错误,告诉我在尝试删除数据库中的记录时无法插入重复的密钥。我的代码是非常基本的

            using (var scope = new TransactionScope())
            {
                    this.DataSource.ParameterGroupEntries.DeleteAllOnSubmit(dataBaseParameterEntries);
                    this.DataSource.SubmitChanges();
                    this.DataSource.ParameterGroupEntries.InsertAllOnSubmit(localParameterEntries.ToArray());
                    this.DataSource.SubmitChanges();

                    scope.Complete();
            }

但是在SubmitChanges()命令后的DeleteAllOnSubmit(dataBaseEntries)上,我不断收到异常“无法在对象中插入重复键”。我已经尝试将其分解为两个单独的事务,甚至使用带有DeleteOnSubmit()循环的foreach甚至删除insert语句。无论如何,我都会遇到这个错误。这真的让我难过,因为我没有插入任何记录,我正在删除它们。有什么建议吗?

更新 删除给我带来麻烦的关键约束似乎有效。但由于我不是数据库的创建者,因此这不是最理想的选择。

2 个答案:

答案 0 :(得分:1)

我猜你的种子有问题,可能是种子值与现有的表值不一致。

你应该致电

dbcc checkident(TableName, reseed, Value)

并使值小于当前值。

答案 1 :(得分:0)

您可能需要在事务范围之前检查更改,删除事务范围内的所有内容并仅保留1个SubmitChanges()和scope.complete()以检查更改(插入重复记录密钥)