继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

04.AutoMapper 之投影(Projection)

慕姐8265434
关注TA
已关注
手记 1147
粉丝 221
获赞 1064

投影(Projection)

投影将源转换为目标而不是扁平化对象模型。如果没有额为的配置AutoMapper需要一个扁平化的目标来匹配源类型的命名结构。当你想将源值投影到一个与源结构不完全匹配的目标中,必须指定自定义的成员映射定义。例如,我们可能想要转换此源结构:

public class CalendarEvent{
    public DateTime Date { get; set; }    public string Title { get; set; }
}

接受网页上的输入表单的对象:

public class CalendarEventForm{
    public DateTime EventDate { get; set; }    public int EventHour { get; set; }    public int EventMinute { get; set; }    public string Title { get; set; }
}

因为目标属性的名称与源属性不完全匹配(CalendarEvent.Date需要是CalendarEventForm.EventDate),所以我们需要在类型映射配置中指定自定义成员映射:

// 模型var calendarEvent = new CalendarEvent
{    Date = new DateTime(2008, 12, 15, 20, 30, 0),
    Title = "Company Holiday Party"};// 配置 AutoMapperMapper.Initialize(cfg =>
  cfg.CreateMap<CalendarEvent, CalendarEventForm>()
    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
    .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
    .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute)));// 执行映射CalendarEventForm form = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);

form.EventDate.ShouldEqual(new DateTime(2008, 12, 15));
form.EventHour.ShouldEqual(20);
form.EventMinute.ShouldEqual(30);
form.Title.ShouldEqual("Company Holiday Party");

每个自定义成员配置都使用一个委托动作来单独配置。 在上面的示例中,我们使用MapFrom来执行自定义源到目标成员的映射。 MapFrom方法使用lambda表达式作为参数,在映射期间对lambda表达式进行求值后赋值给目标成员。 MapFrom表达式可以是任何Func <TSource,object>的 lambda表达式。



作者:这个用户有点逗
链接:https://www.jianshu.com/p/031553705417


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP