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对象设置JobStatususerid,代码如下:var job = _mapper.Map&lt;Job&gt;(requestDto); job.JobStatus = jobStatus; _context.Jobs.Add(job); @mike,很高兴听到它确实有助于解决问题。我将其添加为答案,如果答案解决了问题,请接受它 - 请参阅What should I do when someone answers my question。希望它能帮助其他社区成员快速解决类似问题。 【参考方案1】:

requestDto模型映射到Job模型后,可以为job对象设置JobStatususerid,代码如下:

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

ASP.NET Core API ——Dapper的使用

在 Angular 9 + Asp.net Core Web API 中启用 Windows 身份验证后,预检(选项)请求失败

即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]

ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API