C# 重复密钥错误

C# 重复密钥错误,c#,sql,sql-server,linq,primary-key,C#,Sql,Sql Server,Linq,Primary Key,这让我烦了一会儿 我有一个C#应用程序将数据插入MSSQL数据库。 它使用的是实体linq 列[id]是主键,没有自动增加 现有数据,如: id other columns 1001 ...... 1002 ...... 1003 ...... 然后我得到了新的数据: ROW1: 1003 ....... ROW2: 1004 ....... ROW3: 1005 ....... 1003已存在,因此行1肯定会返回

这让我烦了一会儿

我有一个C#应用程序将数据插入MSSQL数据库。 它使用的是实体linq

列[id]是主键,没有自动增加

现有数据,如:

id       other columns
1001        ......
1002        ......
1003        ......
然后我得到了新的数据:

ROW1:   1003   .......
ROW2:   1004   .......
ROW3:   1005   .......
1003已存在,因此行1肯定会返回“重复键1003错误” 但是,当我尝试插入其他类似 10041005它们不存在

程序还将返回我“重复键1003错误”, 并且没有插入

然后我试着在数据库上将sql客户端,只要插入一个'1004',它就会通过

我想是这种插入缓冲区, 还是像“无或全部”架构

那我怎么做呢

我的代码是一个循环,
插入一行,然后使用
dbconn.savechange()。从数据库读取ID并手动删除重复条目

我建议检查最小值和最大值,并读取它们之间的值。这样你就不必把所有的ID都读回来了


由于开销,这应该比一次插入一个条目要快,并检查是否有错误。

在中,您将把这些新记录/行作为一个批插入,如果出现任何错误,整个批将回滚,但如果您将每条语句的这些记录作为一个单独的批插入,那么1003 with throw and error and sql execution将继续执行其余的sql语句。

谢谢大家

我找到了一个解决办法,那就是 当我第一次发现重复密钥错误时。 这意味着真正的重复密钥

我通过以下方式重新建立数据库连接:

                dbconn.Dispose();
                dbconn = new Entities();
这样就行了

非常感谢!
希望这能帮助其他人

主键必须是唯一的;这是他们的本性。这些错误是故意造成的。我不确定我是否理解你的问题。。。您是否在问如何防止重复键错误?这可能意味着您误用了linq to entities,实体是轻量级的,因此您不应该创建新实体&坚持使用它,而是在每次执行新查询时重新创建一个实体(这样它就不会携带以前查询的状态)。这些是轻量级对象,意味着它们的寿命很短&您应该将其封装在using中,例如:using(var entities=new entities()){use entities here&如果您以后需要它,您将重做一个新的using块,不要存储entities变量以便以后重用!}