带有Postgres的EF Core正在生成负主键

时间:2016-12-09 07:12:47

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

我使用Entity Framework Core和Postgres提供程序,每个实体都有一个带有ValueGeneratedOnAdd的int主键。到目前为止,这一直在完美地运作。我不时地用我的迁移和数据库进行核对,并从dotnet ef migrations add InitialDb开始。在最后一次刷新之后,我的主键已经开始从我假设为int.Min -2147482647生成。他们过去从1开始。

我不确定是什么导致这种情况,我想回到主键从1开始增加。有没有办法实现这个目标?

2 个答案:

答案 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。这是设计行为。