AutoMapper自定义映射相关内容

85 篇文章 0 订阅
文章介绍了如何使用AutoMapper库来简化对象间的映射过程,特别是在处理如CalendarEvent到CalendarEventForm这样的类转换时,避免手动一一对应设置属性。通过配置Mapping和使用ForMember函数,可以实现更动态和自定义的映射规则,例如调用方法或使用Lambda表达式进行复杂转换。
摘要由CSDN通过智能技术生成

例子:

目标class

public class CalendarEvent
{
    //事件日期
    public DateTime Date { get; set; }
    //事件标题
    public string Title { get; set; }
}

对应的DTO

public class CalendarEventForm
{
    //事件日期
    public DateTime EventDate { get; set; }
    //时间对应的小时
    public int EventHour { get; set; }
    //时间对应的分钟
    public int EventMinute { get; set; }
    //事件标题
    public string Title { get; set; }
}

如果是手动映射的形式:

比较复杂,并且每次都需要手动映射

// 定义一个日历事件
var calendarEvent = new CalendarEvent
{
    Date = new DateTime(2014, 12, 15, 20, 30, 0),
    Title = "公司聚会"
};

CalendarEventForm form = new CalendarEventForm
{
    EventDate = calendarEvent.Date.Date,
    EventHour =  calendarEvent.Date.Hour,
    EventMinute = calendarEvent.Date.Minute,
    Title = calendarEvent.Title
};

使用自定义的AutoMapper

// 配置Mapping
Mapper.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));

//Mapping
CalendarEventForm form = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);

ForMember函数

AutoMapper提供了相关的API来支持自定义的Mapping配置,并且他支持lamda。

 IMappingExpression<TSource, TDestination> ForMember(Expression<Func<TDestination, object>> destinationMember 

第一个参数是目标属性,第二个参数是一定义的映射Expression, Expression让这个映射变得更加的动态,可以直接使用表达式或者干脆直接来个函数调用:

.ForMember(dest => dest.Title, opt => opt.MapFrom(src => ChangeTitle(src.Title));//调用方法
.ForMember(dest => dest.Title, opt => opt.MapForm(src => src.Title.Where(....);//表达式

string ChangeTitle(string title)
{
    //自定义处理
    ...

    return "myName" + title;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值