Automapper 使用 ForPath 创建空对象而不是 null

问题描述 投票:0回答:0

嗨,因为我在我的映射配置中添加了一个

ForPath
,比如

CreateMap<ChatMessage, ChatMessageDto>()
        .ForMember(c => c.AmISender, opt => opt.Ignore())
        .ForMember(c => c.CareRequest, opt => opt.MapFrom(c => c.CareRequest))
        .ForPath(c => c.CareRequest!.isCareConsumer, opt => opt.Ignore())
        .ForPath(c => c.CareRequest!.Appointment, opt => opt.MapFrom(c => c.CareRequest!.Appointments.FirstOrDefault()));

代替

CreateMap<ChatMessage, ChatMessageDto>()
        .ForMember(c => c.AmISender, opt => opt.Ignore())
        .ForMember(c => c.CareRequest, opt => opt.MapFrom(c => c.CareRequest))
        .ForPath(c => c.CareRequest!.isCareConsumer, opt => opt.Ignore());

CareRequest 不是 null 而是一个空对象而不是 null 我如何更改我的配置以使 carerequest 保持为 null

ChatMessage.cs

public class ChatMessage {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string? Content { get; set; }
    public CareRequest? CareRequest { get; set; }
    [ForeignKey("CareRequest")]
    public int? CareRequestId { get; set; }
    public CareUser Sender { get; set; } = null!;
    [ForeignKey("Sender")]
    [Required]
    public Guid SenderId { get; set; }
    public CareUser Reciever { get; set; } = null!;
    [ForeignKey("Reciever")]
    [Required]
    public Guid RecieverId { get; set; }
    public bool Seen { get; set; } = false;
    public DateTime Date { get; set; } = DateTime.Now;
    
}

ChatMessageDto.cs

public class ChatMessageDto {
    public string? Content { get; set; }
    public CareRequestDto? CareRequest { get; set; }
    public int? CareRequestId { get; set; }
    public Guid SenderId { get; set; }
    public ChatMessageCareUserDto Sender { get; set; } = null!;
    public Guid RecieverId { get; set; }
    public ChatMessageCareUserDto Reciever { get; set; } = null!;
    public bool Seen { get; set; }
    public bool AmISender { get; set; }
    public DateTime Date { get; set; }
}

CareRequest.cs

public class CareRequest {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public string Task { get; set; } = "";
    [Required]
    public string Description { get; set; } = "";
    [Required]
    public Interval Interval { get; set; }
    public CareConsumer CareConsumer { get; set; } = null!;
    [ForeignKey("CareConsumer")]
    [Required]
    public Guid CareConsumerId { get; set; }

    public ICollection<CareGiverCareRequest> CareGiverCareRequests { get; set; }
    public ICollection<Appointment> Appointments { get; set; }
    
    public CareRequest() {
        CareGiverCareRequests = new Collection<CareGiverCareRequest>();
        Appointments = new Collection<Appointment>();
    }

}

CareRequestDto.cs


public class CareRequestDto {
    [Required(ErrorMessage = "Wij hebben uw taak nodig")]
    public string Task { get; set; } = "";
    [Required(ErrorMessage = "Wij hebben uw omschrijving nodig")]
    public string Description { get; set; } = "";
    [Required(ErrorMessage = "Wij hebben uw interval nodig")]
    public string Interval { get; set; } = "";
    // public DateTime? Date { get; set; }
    public Guid CareConsumerId { get; set; }
    // public string? Time { get; set; } = "";
    // public int? Compensation { get; set; }
    public bool isCareConsumer { get; set; }
    public AppointmentDto? Appointment { get; set; }

}
c# asp.net-core automapper
© www.soinside.com 2019 - 2024. All rights reserved.