[英]Configuring AutoMapper with Lists and Enums
我当前正在配置AutoMapper,因为我需要将Person列表转换为PersonViewModel列表。 我已经将ViewModel
的存储库展平了,如下所示:
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public List<CalendarEntry> Days { get; set; }
}
public class CalendarEntry
{
public int CalendarEntryId { get; set; }
public int PersonId { get; set; }
public Days Day { get; set; }
public DateTime From { get; set; }
public DateTime To { get; set; }
}
public class PersonViewModel
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public bool IsMonday { get; set; }
public bool IsTuesday { get; set; }
public bool IsWednesday { get; set; }
public bool IsThursday { get; set; }
public bool IsFriday { get; set; }
public DateTime? MondayFrom { get; set; }
public DateTime? MondayTo { get; set; }
public DateTime? TuesdayFrom { get; set; }
public DateTime? TuesdayTo { get; set; }
public DateTime? WednesdayFrom { get; set; }
public DateTime? WednesdayTo { get; set; }
public DateTime? ThursdayFrom { get; set; }
public DateTime? ThursdayTo { get; set; }
public DateTime? FridayFrom { get; set; }
public DateTime? FridayTo { get; set; }
}
我创建了一个AutoMapperConfig
文件,在其中为每个成员创建了一个地图,如下所示:
AutoMapper.Mapper.CreateMap<Person, PersonViewModel>()
.ForMember(dest => dest.PersonId, opts => opts.MapFrom(src => src.PersonId))
.ForMember(dest => dest.PersonName, opts => opts.MapFrom(src => src.Name))
现在,我到达了CalendarEntryId,显然它包含在List<CalendarEntry> MeetingDays
道具中,当用户从他们选择的前端创建记录时,如何处理此属性以及Mon-Fri的5个布尔值复选框并输入时间字段,则数据库中其余的DateTime
(日/月/年)被设置为01/01/1900
。 Days是一个存储有Mon-Sun的Enum
,因此我可以通过某种方式进行交叉引用来检查IsMonday
是否为true或false,但是我对如何配置AutoMapper
这一部分感到IsMonday
困惑?
您如何期望将ID列表映射到一个int属性CalendarEntryId
?
如果我是你,我将更改我的视图模型以包含CalendarEntryViewModel
的集合。
创建一个映射CreateMap<CalendarEntry, CalendarEntryViewModel>
,然后Automapper会将您的List<CalendarEntry>
映射到您的视图模型上的List<CalendarEntryViewModel>
。
另外,由于您的数据模型和视图模型具有与PersonId相同的属性名称,因此无需显式映射该名称。 Automapper将为您完成此任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.