วันจันทร์ที่ 13 กรกฎาคม พ.ศ. 2558

ASP.NET การใช้งาน AutoMapper ในกรณีที่ ชื่อ property ใน Model ปลายทาง ไม่ตรงกับ Model ต้นทาง

ทำเหมือน AutoMapper ธรรมดาเลย แต่เพิ่ม code ส่วนนี้เข้าไป

            Mapper.CreateMap<Modelต้นทาง, Modelปลายทาง>()
               //config property ที่ชื่อต้นทางกับปลายทางไม่ตรงกัน 
              //เช่น ต้นทาง: Id , ปลายทาง: UserId
                .ForMember(
                    dst => dst.UserId ,
                    opt => opt.MapFrom(src => src.Id ))
              //ทำเหมือนข้างบนไปเรื่อยๆในอันที่ชื่อไม่ตรงกัน
                .ForMember(
                    dst => dst.EndDate,
                    opt => opt.MapFrom(src => src.EndDatePlan));

รวม code จะได้เป็น
        public static Modelปลายทาง Toชื่อที่มันสื่อว่ามันแมพไปModelปลายทางนะ(this Modelต้นทาง model)
        {

            Mapper.CreateMap<Modelต้นทาง, Modelปลายทาง>()
                .ForMember(
                    dst => dst.UserId ,
                    opt => opt.MapFrom(src => src.Id ))
                .ForMember(
                    dst => dst.ชื่อตัวแปรของ Property Model ปลายทาง,
                    opt => opt.MapFrom(src => src.ชื่อตัวแปรของ Property Model ต้นทาง));

            return Mapper.Map<
Modelปลายทาง>(model) ?? new Modelปลายทาง();
        }

วันจันทร์ที่ 6 กรกฎาคม พ.ศ. 2558

ASP.NET การใช้งาน AutoMapper

AutoMapper ช่วยเราในการ Map Model จาก Repository เข้ากับ Service
เราไม่ต้อง foreach เองในกรณีที่ส่งมาเป็น List<>

ขั้นตอนการทำงาน
1. ไปที่ folder Service แล้วสร้าง folderตามชื่อ Service จากนั้นสร้างไฟล์ ชื่อService+Mappper
2. ใส่ using AutoMapper;
3 ตัวอย่าง     public static class TestMapper
    {
//กรณี Model ที่เป็น List
        public static List<ชื่อ Model ใน Service> To+ชื่อ Model ใน Service(this List<ชื่อ model ที่ส่งมาจาก Repository> entities)
        {
            return Mapper.Map<List<ชื่อ Model ใน Service>>(entities) ?? new List<ScheduleMemberInGroupViewModel>();
        }
 ***** ?? new List<ScheduleMemberInGroupViewModel>(); แปลว่ากรณีที่ไม่มีข้อมูลใน Return Model List<ScheduleMemberInGroupViewModel> เปล่าๆกลับไป ****

//กรณี Model ที่ไม่ได้เป็น List
        public static ScheduleMemberInGroupViewModel  ToTestViewModel(this UserInCompanies entities)
        {
            return Mapper.Map<ScheduleMemberInGroupViewModel>(entities) ?? new  ScheduleMemberInGroupViewModel;
        }
    }
4. ไปที่ Project Web ->App_Start->AutoMapperConfig
    public partial class AutoMapperConfig
    {
        public static void RegisteredAutoMapper()
        {
            ControllerAutoMapperBootstrapper.Configure();

            Mapper.CreateMap<ชื่อ model ที่ส่งมาจาก Repository, ชื่อ Model ใน Service>();
        }
     }
5. สร้าง Model ใน Service ต้องตั้งชื่อตัวแปรให้ตรงกับ Model ที่ส่งมาจาก Repo ด้วยนะไม่งั้นมัน Map ไม่ได้จะเออเร่อ
6. การใช้งาน
    .Toชื่อMapper ที่เราจะ Map ระวังว่าต้อง type ตรงกับที่เราMapด้วยนะ
7. เปิดหน้าที่เราจะใช้ Mapper แล้วพิมพ์ using Pathที่เราเก็บ ชื่อMapper ไว้                                          ถ้าไม่พิมมันจะหาไม่เจอโง่ชิบหายเลย