04.AutoMapper 之投影(Projection)

solution發表於2021-09-09

投影(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表示式。



作者:這個使用者有點逗
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2820170/,如需轉載,請註明出處,否則將追究法律責任。

相關文章