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
相关产品推荐
相关产品推荐

