调用新增公司API时返回的Company Id为0的问题排查
问题原因
你返回的CompanyDto的Id字段赋值错误:你使用了入参companyDto.Id,新增场景下前端不会传入ID值,这个字段默认就是0。
数据库自增生成的ID在调用SaveChangesAsync()之后,EF Core会自动把生成的主键值回写到你插入的CompanySetting实体(也就是你代码里的company变量)的Id属性上,直接取这个值即可。
修复方案
有两种可选改法:
方案1:手动修正返回值的Id赋值
把最后return的代码段改成:
return new CompanyDto() { Id = company.Id, // 替换为保存后回写的company实体的Id,而非入参的Id CompanyName = companyDto.CompanyName, CompanyRegistrationNumber = companyDto.CompanyRegistrationNumber, isActive = companyDto.isActive, isArchived = companyDto.isArchived, UserId = companyDto.UserId };
方案2:复用已配置的AutoMapper映射,避免手动赋值错误
你已经配置了CompanySetting到CompanyDto的映射规则,直接调用Mapper转换即可,代码更简洁:
// 直接替换原有return逻辑即可 return _mapper.Map<CompanyDto>(company);
额外优化点
你代码里的_context.Users.Update(user)可以直接删除:因为user是从当前DbContext查询出来的实体,本身处于被跟踪状态,你给它的导航属性新增了关联数据,EF Core在保存时会自动识别新增的关联记录,不需要手动调用Update方法。
内容的提问来源于stack exchange,提问作者Jeremiah
相关产品推荐
相关产品推荐

