我使用Entity Framework Core和Postgres提供程序,每个实体都有一个带有ValueGeneratedOnAdd的int主键。到目前为止,这一直在完美地运作。我不时地用我的迁移和数据库进行核对,并从dotnet ef migrations add InitialDb
开始。在最后一次刷新之后,我的主键已经开始从我假设为int.Min -2147482647
生成。他们过去从1开始。
我不确定是什么导致这种情况,我想回到主键从1开始增加。有没有办法实现这个目标?
答案 0 :(得分:1)
我在代码中发现了一些导致此行为的内容。在我的基本存储库中添加新实体时,我将DbContext.Set<T>().Add(entity)
更改为DbContext.Attach(entity).State = EntityState.Added;
我这样做的原因是因为使用附加EF时会自动检测现有的相关实体。仅使用add将尝试再次添加相关实体,无论它们是否已存在于db中。
我不知道为什么在生成ID时会突然切换到负int。
答案 1 :(得分:1)
EF Core会生成临时ID,然后在调用SaveChanges时将其替换为实际ID。这是设计行为。