asp.net 使用两个源的AutoMapperMap类

ehxuflar  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(105)

我很难使用自动Map器将VistingHoursDTO中的DateTime属性Map到VistingHours中的DateTimeOffset,而Map时使用的是Location或LocationDTO中的TimeZoneInfo。原因是DateTime没有偏移量。我知道如何使用DateTime和TimeZoneInfo创建DateTimeOffset。只是如果您需要另一个父Map中的属性,我不确定该如何进行Map。
澄清更新:
我需要使用位置.时区信息和日期时间Map访问小时数.打开(日期时间)-〉访问小时数.打开(日期时间偏移)。
所以;

VistingHours.Open = new DateTimeOffset(VistingHoursDTO.Open, Location.TimeZoneInfo.GetUtcOffset(VistingHoursDTO.Open))

课程:

public class Location
{
    public TimeZoneInfo TimeZoneInfo { get; set; }
    public IEnumerable<VisitingHours> VisitingHours { get; set; }
}

public class LocationDTO
{
    public TimeZoneInfo TimeZoneInfo { get; set; }
    public IEnumerable<VisitingHours> VisitingHours { get; set; }
}

public class VisitingHours
{
    public DateTimeOffset Open { get; set; }
    public DateTimeOffset Close { get; set; }
}

public class VisitingHoursDTO
{
    public DateTime Open { get; set; }
    public DateTime Close { get; set; }
}

AutoMapper代码示例(不知道如何处理它):

CreateMap<Location, LocationDTO>()
    .ReverseMap();
            
CreateMap<VisitingHours, VisitingHoursDTO>()
    .ReverseMap();
ygya80vv

ygya80vv1#

你可以使用下面的一种。

// From DTO to Model
CreateMap<VisitingHoursDTO, VisitingHours>()
    .ForMember(dst => dst.Open, option => option.MapFrom(src => GetOffsetFromDateTime(src.Open)))
    .ForMember(dst => dst.Close, option => option.MapFrom(src => GetOffsetFromDateTime(src.Close)));

// From Model to DTO    
CreateMap<VisitingHours, VisitingHoursDTO>()
    .ForMember(dst => dst.Open, option => option.MapFrom(src => GetDateTimeFromOffset(src.Open)))
    .ForMember(dst => dst.Close, option => option.MapFrom(src => GetDateTimeFromOffset(src.Close)));

您必须根据自己的要求编写转换方法GetOffsetFromDateTimeGetDateTimeFromOffset

相关问题