Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:Insert使用Azure SQL而不是本地SQL违反主键约束_C#_Sql Server_Entity Framework_Azure - Fatal编程技术网

C# 实体框架:Insert使用Azure SQL而不是本地SQL违反主键约束

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(),我得到: 例外:违反主键

我正在迁移本地SQL Server 2014数据库以在Azure中使用。我有一个运行在IIS 8中的Asp.net MVC应用程序,以通常的方式使用实体框架连接到Azure SQL Server数据库

  • 我有一个
    dbContext
  • 使用(…dbContext.Database.BeginTransaction())
  • 已添加其他实体并成功运行
    SaveChanges()
  • 特别是对于一个实体,我执行
    db.entity.add(newEntity)
    ,然后
    SaveChanges()
    ,我得到: 例外:违反主键约束“PK_实体”。无法在对象“dbo.entity”中插入重复键。重复的键值为(2)

  • 主键是一个自动递增的数字,我是唯一运行这个的用户。此表中已有156条记录

    奇怪的是,当我使用本地SQL Server实例在本地计算机上运行此程序时,它工作正常,但当从IIS和Azure db运行时,会发生此异常

    该实体根本没有其他关系/约束


    我确实觉得有一个线索,如果我一直试图保存这个记录(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。