在反向映射中使用自定义映射

use custom mapping in reverse map

这是我的代码:

public class PostDto : BaseDto<PostDto, Post>
{
    [JsonIgnore]
    public override int Id { get; set; }

    [Required]
    [StringLength(200)]
    public string Title { get; set; }

    [Required]
    [DataType(DataType.Html)]
    public string Text { get; set; }

    [Required]
    [StringLength(500)]
    [DataType(DataType.Text)]
    public string ShortDescription { get; set; }

    [Required]
    public int TimeToRead { get; set; }

    [Required]
    [DataType(DataType.ImageUrl)]
    public string Image { get; set; }

    [Required]
    public int CategoryId { get; set; }

    [JsonIgnore]
    public DateTimeOffset Time { get; set; }

    [JsonIgnore]
    public int UserId { get; set; }

    public override void CustomMappings(IMappingExpression<Post, PostDto> mappingExpression)
    {
            mappingExpression.ForMember(
               dest => dest.Time,
               config => config.MapFrom(src => DateTimeOffset.Now));

            mappingExpression.ReverseMap().ForMember(
                dest => dest.Time,
                config => config.MapFrom(src => DateTimeOffset.Now));

            mappingExpression
                .ForMember(d => d.Time, opt => opt.MapFrom(src => DateTimeOffset.Now))
                .ReverseMap()
                .ForMember(d => d.Time, opt => opt.MapFrom(src => DateTimeOffset.Now))
                .ForPath(s => s.Time, opt => opt.MapFrom(src => DateTimeOffset.Now));
     }
}

然后我从控制器获取 dto,并将其映射到实体。我想在自动映射时添加时间但是它不起作用。
如果我从 entity(post) 映射到 dto(postDto) 例如将日期转换为字符串,它可以工作但反过来它不起作用

我的控制器:

public override Task<ApiResult<PostSelectDto>> Create(PostDto dto, CancellationToken cancellationToken)

将 dto 转换为实体的代码(在 [model] 中的地图时间为 null 或 datetimeoffset 的默认值之后)

var model = dto.ToEntity(Mapper);

ToEntity 方法:

public TEntity ToEntity(IMapper mapper)
{
    return mapper.Map<TEntity>(CastToDerivedClass(mapper, this));
}

基于此 url 我们可以添加类似日期时间的代码,我使用 override
发送 link

原因是,UseValue 是静态的,所以在实例化 MapProfile 时设置一次,所有后续的 .Map() 调用将使用相同的静态值

所以我在不使用反射的情况下编写自定义地图来为实体和 dto 创建地图

public class PostCustomMapping : IHaveCustomMapping
{
    public void CreateMappings(Profile profile)
    {
        profile.CreateMap<Post, PostDto>().ReverseMap()
            .ForMember(dest => dest.Time,
                opt =>
                    opt.MapFrom(src => DateTimeOffset.Now))

            .ForMember(dest => dest.Text,
                opt =>
                    opt.MapFrom(src => src.Text.FixPersianChars()))

            .ForMember(dest => dest.Title,
                opt =>
                    opt.MapFrom(src => src.Title.FixPersianChars()))

            .ForMember(dest => dest.ShortDescription,
                opt =>
                    opt.MapFrom(src => src.ShortDescription.FixPersianChars()));
    }
}