ASP.NET Core API - 如何在映射后将额外字段插入数据库
Posted
技术标签:
【中文标题】ASP.NET Core API - 如何在映射后将额外字段插入数据库【英文标题】:ASP.NET Core API - How to insert extra fields into the DB after mapping 【发布时间】:2022-01-16 22:42:03 【问题描述】:在我的 ASP.NET Core Web API 中,我有这个模型:
工作:
public class Job
[Key]
public long Id get; set;
public string JobTitle get; set;
public string JobStatus get; set;
public long UserId get; set;
public string JobDescription get; set;
DTO:
public class JobCreationRequestDto
public string JobTitle get; set;
public string JobDescription get; set;
public class JobResponseDto
public long Id get; set;
public string JobTitle get; set;
public string JobDescription get; set;
一个用户可以放置多个工作
映射:
public class JobMapProfile : Profile
public JobMapProfile()
CreateMap<JobCreationRequestDto, Job>();
CreateMap<Job, JobResponseDto>();
服务:
public interface IJobService
Task<GenericResponseDto<JobResponseDto>> CreateJobAsync(JobCreationRequestDto requestDto);
public async Task<GenericResponseDto<JobResponseDto>> CreateJobAsync(JobCreationRequestDto requestDto)
var response = new GenericResponseDto<JobResponseDto>();
var userId = _userResolverService.GetUserId();
var jobStatus = "Processed";
try
var job = _mapper.Map<Job>(requestDto);
_context.Jobs.Add(job);
await _context.SaveChangesAsync();
response.StatusCode = 201;
response.Result = _mapper.Map<JobResponseDto>(job);
catch (Exception ex)
response.Error = new ErrorResponseDto()
ErrorCode = 500,
Message = ex.Message
;
return response;
控制器:
[HttpPost, Route("")]
public async Task<ActionResult<GenericResponseDto<JobResponseDto>>> CreateJob(JobCreationRequestDto request)
var response = await _service.CreateJobAsync(request);
Response.StatusCode = response.StatusCode ?? StatusCodes.Status201Created;
return new JsonResult(response);
在服务中,在 await _context.SaveChangesAsync() 实现之前,我想包括这个:
工作状态 = 工作状态;
用户 ID = 用户 ID;
我如何做到这一点?
谢谢
【问题讨论】:
你有没有试过设置like job.JobStatus = jobStatus; 将requestDto
模型映射到Job
模型后,可以为job
对象设置JobStatus
或userid
,代码如下:var job = _mapper.Map<Job>(requestDto); job.JobStatus = jobStatus; _context.Jobs.Add(job);
@mike,很高兴听到它确实有助于解决问题。我将其添加为答案,如果答案解决了问题,请接受它 - 请参阅What should I do when someone answers my question。希望它能帮助其他社区成员快速解决类似问题。
【参考方案1】:
将requestDto
模型映射到Job
模型后,可以为job
对象设置JobStatus
或userid
,代码如下:
var job = _mapper.Map<Job>(requestDto);
job.JobStatus = jobStatus;
//job.UserId = userId;
_context.Jobs.Add(job);
【讨论】:
以上是关于ASP.NET Core API - 如何在映射后将额外字段插入数据库的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用AutoMapper进行实体映射
将文件从 ASP.NET Core Web api 发布到另一个 ASP.NET Core Web api
在 Angular 9 + Asp.net Core Web API 中启用 Windows 身份验证后,预检(选项)请求失败
即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]