Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带Postgres的EF Core正在生成负主键_C#_Entity Framework_Postgresql_Entity Framework Core - Fatal编程技术网

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

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递增的状态。有什么方法可以做到这一点吗?我在导致这种行为的代码中发现了一

我将实体框架核心与Postgres提供者一起使用,每个实体都有一个带有valueGeneratedAnd的int主键。到目前为止,这种方法一直运作良好。我时不时地对我的迁移和数据库进行核处理,然后重新开始使用
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();对我来说奇怪的是,这一直在起作用。这应该是答案。