zoukankan      html  css  js  c++  java
  • 04.AutoMapper 之投影(Projection)

    https://www.jianshu.com/p/031553705417

    投影(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"
    };
    
    // 配置 AutoMapper
    Mapper.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表达式。

  • 相关阅读:
    ASP.NET Web API 控制器执行过程(一)
    ASP.NET Web API 控制器创建过程(二)
    ASP.NET Web API 控制器创建过程(一)
    ASP.NET Web API WebHost宿主环境中管道、路由
    ASP.NET Web API Selfhost宿主环境中管道、路由
    ASP.NET Web API 管道模型
    ASP.NET Web API 路由对象介绍
    ASP.NET Web API 开篇示例介绍
    ASP.NET MVC 视图(五)
    ASP.NET MVC 视图(四)
  • 原文地址:https://www.cnblogs.com/zengpeng/p/11059889.html
Copyright © 2011-2022 走看看