【Mapper实现两个不同的表往一个表中加数据】

mapper实现两个不同表往同一个表中加数据

mapper、反射的作用、AutoMapper

我理解的:
1、本质是不同的对象通过映射,使得目标对象得到原对象的值;

反射和Mapper的区别,实现方式

1、都是通过映射去赋值,那么可不可以通过反射去实现呢?
可以的,二者本质是相同。

代码展示

1、通过mapper去给对象赋值
Mapper.CreateMap<H21ShipmentDataModel, ED_JMWmsOcvDataProduct>().ForMember(ed => ed.LineNo, op => op.MapFrom(h => "H21")).ForMember(ed=> ed.transSuccessFlag, op => op.MapFrom(h21 => h21.transSuccessFlag) .ForMember(ed => ed.EventDate, opt => opt.MapFrom(h21 => h21.Date)).ForMember(ed => ed.LineNo, op => op.ignore(h21=>h21.LineNo)));

2、`通过反射给对象赋值
//解决问题,两个类字段相同,但是类名不一样,如何进行赋值,通过反射进行逐一字段读取然后赋值
                var DuanXinType = new DuanXin();
                DuanXinType.RECEIVE_LOGIN_NAME = "cwh";
                DuanXinType.RECEIVE_Number = "13800138000";
                
                //获取对象类型
                var typeduanxin = typeof(DuanXin);
                //获取对象属性
                var PropertyInfoDuanxin = typeduanxin.GetProperties();
                
                WeChat pWeChat = new WeChat();
                var typeWeChat = typeof(WeChat);
                var PropertyInfosWeChat = typeWeChat.GetProperties();
                //给新对象赋值
                foreach (var itemduanxin in PropertyInfoDuanxin)
                {
    
    
                    var objDuanXinType = itemduanxin.GetValue(DuanXinType);
                    foreach (var itemWeChat in PropertyInfosWeChat)
                    {
    
    
                        if (itemduanxin.Name == itemWeChat.Name)
                        {
    
    
                            itemWeChat.SetValue(pWeChat, objDuanXinType, null);
                        }
                    }
                }



> 解析:
> 1ForMember(ed => ed.LineNo, op => op.MapFrom(h => "H21")):意思是将 给目标表字段赋值,因为原表中没有该字段,是目标表新加的字段。
> 2ForMember(ed=> ed.transSuccessFlag, op => op.MapFrom(h21 => h21.transSuccessFlag) 将原表的字段给目标表字段,这种相同字段名之间的映射其实可以省略。
> 3ForMember(ed => ed.EventDate, opt => opt.MapFrom(h21 => h21.Date))这个就是不同的字段值映射,需要手动去关联这两个字段
> 4ForMember(ed => ed.LineNo, op => op.ignore(h21=>h21.LineNo)) :意思是忽略原表中的字段不映射过来

猜你喜欢

转载自blog.csdn.net/KJJfighting/article/details/130348918