【发布时间】:2020-04-04 14:10:57
【问题描述】:
这是我的代码:
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));
}
【问题讨论】:
标签: .net api asp.net-core automapper