You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:35:00