C# 实体框架:Insert使用Azure SQL而不是本地SQL违反主键约束
我正在迁移本地SQL Server 2014数据库以在Azure中使用。我有一个运行在IIS 8中的Asp.net MVC应用程序,以通常的方式使用实体框架连接到Azure SQL Server数据库C# 实体框架:Insert使用Azure SQL而不是本地SQL违反主键约束,c#,sql-server,entity-framework,azure,C#,Sql Server,Entity Framework,Azure,我正在迁移本地SQL Server 2014数据库以在Azure中使用。我有一个运行在IIS 8中的Asp.net MVC应用程序,以通常的方式使用实体框架连接到Azure SQL Server数据库 我有一个dbContext 使用(…dbContext.Database.BeginTransaction()) 已添加其他实体并成功运行SaveChanges() 特别是对于一个实体,我执行db.entity.add(newEntity),然后SaveChanges(),我得到: 例外:违反主键
dbContext
使用(…dbContext.Database.BeginTransaction())
SaveChanges()
db.entity.add(newEntity)
,然后SaveChanges()
,我得到:
例外:违反主键约束“PK_实体”。无法在对象“dbo.entity”中插入重复键。重复的键值为(2)
我确实觉得有一个线索,如果我一直试图保存这个记录(ISS和Azure),失败的重复键值每次递增1 这很奇怪,也许Azure Bd中identity coll的索引设置为1。 您可以强制您的identity coll使用大于表中最后一个Id的索引: 在sql server中,您可以检查下一个Id:
SELECT IDENT_CURRENT ('tablename') AS Current_Identity;
您可以将其强制设置为其他号码:
DBCC CHECKIDENT ('tablename', RESEED, 157);
此表中已有156条记录
-请从此表中选择*?如果您可以删除该表中的所有记录,然后尝试添加()。这将证明错误是否不是由于现有数据造成的。最小限度地共享表DDL和EF模型的相关部分,以及导致错误的数据库通信量的EF日志(db.Database.log=m=>MyLogger(m))。最好将问题归结为一个完整的、独立的复制。在执行此操作时,您可能会发现问题的根本原因。在我的Azure SQL数据库上测试DBCC命令后,我发现我需要删除Identitycoll以使该命令正常工作。DBCC CHECKIDENT('tablename',重新设定种子,157);谢谢你,芮。对于156个表,IDENT_CURRENT
返回6!这就是问题所在,您必须修复索引,因为Amor-MSFT注释正确的命令是dbcccheckident('tablename',RESEED,157);我运行了DBCC CHECKIDENT,但是现在我得到了重复的键值是(158)。您必须检查表中较高的键值是什么,然后将RESEED设置为。例如,如果较高的键为1000,则设置为1001。