EF Core 7中获取Identity列生成值失败:SaveChangesAsync后仍返回0
解决EF Core 7中SaveChangesAsync后Identity列返回0的问题
核心问题:未等待异步操作完成
你在AddPersonAsync方法里调用_dbContext.SaveChangesAsync()时,没有使用await关键字。这会导致异步插入操作还没完成(数据库还没生成并返回自增的PersonID),就直接将newPerson转换为响应返回,此时PersonID还是初始的0值。
修复后的服务层代码
修改方法,添加await并标记方法为async:
public async Task<PersonResponse?> AddPersonAsync(PersonAddRequest addRequest) { Person newPerson = addRequest.ToPerson(); _dbContext.Persons.Add(newPerson); await _dbContext.SaveChangesAsync(); // 等待异步插入操作完成,获取数据库生成的ID return newPerson.ToResponse(); }
额外验证项
- 确认数据库中
Person表的PersonID字段已设置为自增标识列(比如SQL Server中的IDENTITY(1,1))。 - 确保EF Core实体配置未冲突:你已经用
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]标记了PersonID,如果使用Fluent API配置,需确认没有覆盖该设置:modelBuilder.Entity<Person>() .Property(p => p.PersonID) .ValueGeneratedOnAdd();
内容的提问来源于stack exchange,提问作者yam cantorna
相关产品推荐
相关产品推荐

