【发布时间】:2023-10-15 18:49:02
【问题描述】:
我在将我的一个具有集合的 DTO 映射到实体模型中的展平版本时遇到问题。
这是 DTO 类:
public class Location {
public int LocationId {get; set;}
public string LocationName {get;set;}
public List<HoursOfOperation> HoursOfOperation {get; set;}
}
public class HoursOfOperation {
public int WeekNumber {get; set;}
public int DayNumber {get; set;}
public List<TimeSlot> OperatingHours {get; set;}
}
public class TimeSlot{
public TimeSpan StartTime {get; set;}
public TimeSpan EndTime { get; set;}
}
这是我的实体模型类:
public partial class HoursOfOperation
{
public int HoursOfOperationId { get; set; }
public int FkLocationId { get; set; }
public short WeekNumber { get; set; }
public short DayNumber { get; set; }
public TimeSpan StartTime { get; set; }
public TimeSpan EndTime { get; set; }
}
我已经使用了 Automapper 并做到了这一点:
public OpHoursMappingProfile()
{
CreateMap<HoursOfOperation, Models.ClientDb.HoursOfOperation>()
.ForMember(dest => Enum.GetName(typeof(DayOfWeek), dest.DayNumber), opt => opt.MapFrom(t => t.DayNumber))
.ForMember(dest => dest.WeekNumber, opt => opt.MapFrom(t => t.WeekNumber));
}
我不确定如何映射时间段。我尝试按照here 的说明创建自定义扩展,但没有帮助。
【问题讨论】:
-
对
EndTime使用Max(),对StartTime使用Min()。例如获取结束时间:.ForMember(dst => dst.EndTime, opt => opt.MapFrom(t => t.OperatingHours.Max(hours => hours.EndTime))). -
@Prolog:实际上,我想要的是为每个时间段创建一个 HoursOfOperation 实体。因此,如果 DTO 在某一天有 3 个时隙,则将在数据库中创建 3 个 HoursOfOperation 记录。
标签: collections automapper flatten