C# 带Postgres的EF Core正在生成负主键
我将实体框架核心与Postgres提供者一起使用,每个实体都有一个带有valueGeneratedAnd的int主键。到目前为止,这种方法一直运作良好。我时不时地对我的迁移和数据库进行核处理,然后重新开始使用C# 带Postgres的EF Core正在生成负主键,c#,entity-framework,postgresql,entity-framework-core,C#,Entity Framework,Postgresql,Entity Framework Core,我将实体框架核心与Postgres提供者一起使用,每个实体都有一个带有valueGeneratedAnd的int主键。到目前为止,这种方法一直运作良好。我时不时地对我的迁移和数据库进行核处理,然后重新开始使用dotnet ef migrations add InitialDb。上次刷新之后,我的主键已经开始根据我假设的int.Min-2147482647生成。他们过去常常一点出发 我不确定这是什么原因造成的,我想回到主键从1递增的状态。有什么方法可以做到这一点吗?我在导致这种行为的代码中发现了一
dotnet ef migrations add InitialDb
。上次刷新之后,我的主键已经开始根据我假设的int.Min-2147482647
生成。他们过去常常一点出发
我不确定这是什么原因造成的,我想回到主键从1递增的状态。有什么方法可以做到这一点吗?我在导致这种行为的代码中发现了一些我修改过的东西。在我的基本存储库中添加新实体时,我将
DbContext.Set().Add(entity)
更改为DbContext.Attach(entity).State=EntityState.Added代码>
我这样做的原因是,当使用attach EF时,它将自动检测现有的相关实体。仅使用add将尝试再次添加相关实体,无论它们是否已存在于数据库中
我不知道为什么在生成ID时它会突然切换为负整数。EF Core生成临时ID,然后在调用SaveChanges时用实际ID替换。这取决于设计行为。您是否使用了[Key]
和[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
等属性?它看起来像id的默认值具有int.MinValue而不是0。请在插入之前尝试将此值更改为0。默认值为int。但它与上面发布的内容略有不同。我使用fluent API将其设置为:builder.Entity().Property(p=>p.Id).ValueGeneratedOnAdd();对我来说奇怪的是,这一直在起作用。这应该是答案。