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

ASP.NET Core 5中使用EF泛型仓储异步创建记录如何返回新增Id

问题根因

你拿不到ID是两个问题导致的:

  • 你调用的CreateAsync是异步方法,没有加await关键字等待执行完成,返回数据时数据库插入、ID回写的逻辑还没执行,实体里自然还是默认值0
  • 你的仓储实现本身已经在SaveChangesAsync后返回了带ID的实体,EF Core也会自动把数据库生成的自增ID回写到你传入的实体对象上,完全不需要额外写反射逻辑

修正后的控制器代码

// 控制器方法要改为异步,返回Task<IActionResult>
public async Task<IActionResult> Create_Requirement(Requirement model) 
{
    try {
        // 加await等待仓储方法执行完成
        await _requirement.CreateAsync(model);
        // 此时EF已经把数据库生成的ID回写到model的Id属性上了,直接用即可
        return Json(new { success = true, data = model, newId = model.Id });
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    return Json(new { success = false, data = model });
}

补充说明

只要你的Requirement实体类的Id属性已经配置为数据库自增主键(EF Core默认会把名为Id/实体名+Id的字段识别为主键,值由数据库生成),SaveChangesAsync执行完成后就会自动把生成的ID赋值到实体的对应属性,不需要任何额外的反射、查询操作。

内容的提问来源于stack exchange,提问作者Yanayaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:04