C# Postgres插入/更新ID-2147482647

C# Postgres插入/更新ID-2147482647,c#,postgresql,entity-framework,.net-core,C#,Postgresql,Entity Framework,.net Core,我正在使用Npgsql.EntityFrameworkCore在表中插入和更新记录。但是,它偶尔会抛出错误: 无法跟踪实体类型“UserAccount”的实例,因为 另一个具有{'Id'}相同键值的实例已在运行 跟踪。附着现有实体时,请确保仅附着一个实体 将附加具有给定键值的实例。考虑使用 “DbContextOptions Builder.EnableSensivedAtalogging”以查看 相互冲突的键值 其中我的表/实体是UserAccount 我查看数据库,发现其中一个ID是-214

我正在使用Npgsql.EntityFrameworkCore在表中插入和更新记录。但是,它偶尔会抛出错误:

无法跟踪实体类型“UserAccount”的实例,因为 另一个具有{'Id'}相同键值的实例已在运行 跟踪。附着现有实体时,请确保仅附着一个实体 将附加具有给定键值的实例。考虑使用 “DbContextOptions Builder.EnableSensivedAtalogging”以查看 相互冲突的键值

其中我的表/实体是UserAccount

我查看数据库,发现其中一个ID是-2147482647

这种情况偶尔发生,我无法复制或找到任何有关它的文档。在更新ID之前,我没有任何错误,一旦我将ID更新到适当的位置,系统将再次正常运行,不会出现前一个错误

看起来,-2147482647是实体在保存更改之前用于对象的临时ID。保存更改后,它应该将该ID更新为数据库序列应该是什么。因此,当它试图将对象保持为-2147482647时,它会看到系统中已经存在ID,并抛出错误


以前有人发生过类似的事情吗?我一直在尽我所能排除故障,但由于无法重现,我只是在黑暗中拍摄。

我遇到了这个问题,不得不处理数据库问题

首先,从表中进行全选,并按Id递减顺序排列,如果愿意,可以限制为一个。记下自动增加生成的最后一个数字

现在,转到序列文件,打开有问题的表\u序列。现在看看数字是否匹配

发生在我身上的事情是,我从生产数据库中进行了备份,并在本地数据库中进行了恢复,但我没有从本地数据库中删除旧表。因此,我的序列文件来自较旧的数据库数据


希望我能帮助您,我为我的英语道歉,这是自学的。

-2147482647看起来像是4字节有符号整数的整数溢出。错误说明了一切,而不是使用DbContext。添加()请在添加实体之前先尝试查找()。如果实体存在,只需附加它(使用attach()。然而,奇怪的ID似乎是Npgsql包的一个问题@ObayAbd Algader,这就是我正在做的。我正在执行一个Find(),它将返回一个结果。然后我编辑该结果,然后调用SaveChanges(),我没有使用Attach(),因为我假设实体在保存时无论如何都会这样做。