Postgres插入/更新ID -2147482647

时间:2018-11-06 13:44:40

标签: c# postgresql entity-framework .net-core

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

  

无法跟踪实体类型“ UserAccount”的实例,因为   具有相同的{'Id'}键值的另一个实例已经在   跟踪。连接现有实体时,请确保只有一个实体   具有给定键值的实例被附加。考虑使用   'DbContextOptionsBuilder.EnableSensitiveDataLogging'以查看   冲突的键值。

我的表/实体是UserAccount。

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

enter image description here

这种情况偶尔发生,我无法复制或找到任何文档。在更新ID之前,我没有任何错误,一旦将ID更新到合适的程度,系统即可再次正常运行,而不会出现先前的错误。

似乎-2147482647是Entity进行SavesChanges之前用于对象的临时ID。保存更改后,应将其ID更新为数据库序列。因此,当它尝试将对象保留为-2147482647时,会看到ID已在系统中并引发错误。

以前有没有人做过这样的事情?我一直在竭尽所能地对它进行故障排除,但由于无法复制它,我只是在黑暗中拍摄。

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题,与数据库问题有关。

首先,从 your-table 中选择所有,并按 Id 递减排序,如果您愿意,可以限制为一个。记下自动增加生成的最后一个数字。

现在,转到您的 Sequence 文件,打开您遇到问题的 table_sequence。现在看看数字是否匹配。

发生在我身上的事情是,我从生产数据库做了一个备份,并在我的本地数据库上恢复了它,但我没有从本地删除旧表。所以我的序列文件来自较旧的 Db 数据。

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

相关问题