使用列表和枚举配置AutoMapper

时间:2015-02-05 11:22:01

标签: c# asp.net-mvc-5 automapper

我正在配置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个bool他们选择复选框并输入时间字段,其余的DateTime(日/月/年)在数据库中设置为01/01/1900。天是存储Mon-Sun的Enum所以我能够以某种方式交叉引用来检查例如IsMonday是真是假,但是我对如何配置这部分感到困惑AutoMapper起来了吗?

1 个答案:

答案 0 :(得分:0)

您希望如何将ID列表映射到一个int属性CalendarEntryId

如果我是你,我会更改我的视图模型以包含CalendarEntryViewModel的集合。

创建地图CreateMap<CalendarEntry, CalendarEntryViewModel>,然后Automapper会将您的List<CalendarEntry>映射到您的视图模型上的List<CalendarEntryViewModel>

此外,由于您的数据模型和视图模型具有相同的PersonId属性名称,因此您不需要显式映射它。 Automapper会为你做这件事。