شروع کار با Automapper

پنجشنبه 21 مرداد 1395

در این مقاله قصد داریم تا یک آشنایی ابتدایی با Automapper را داشته باشیم . بعد از معرفی ، با ارائه یک مثال به نحوه کار با Automapper در یک برنامه می پردازیم .

شروع کار با Automapper

Automapper یک شی از شی مرتب کننده (The object mapper) است . بدین ترتیب ، ما توانایی مرتب سازی خصوصیات (propeties) یک شی از یک نوع ، نسبت به خصوصیات دیگر اشیا داریم . Automapper بطور گسترده در مواردی که DTO _ مخفف (Data Transfer Object) _ استفاده میشود ، مورد استفاده قرار میگیرد. بدین ترتیب ، خصوصیات اشیا خیلی آسان میتواند از View Object به DTO و از DTO object به Domin Model منتقل شود .

Automapper چه مشکلی را حل میکند ؟
در View ، وقتی شی PersonDTO  را از Middle layer میگیریم ، ما باید personObject را  نشان دهیم .

PersonDTO personDTO = GetPersonFromDB();  
PersonView personview = new PersonView()   
{  
    FirstName = personDTO.FirstName,  
        LastName = personDTO.LastName  
} 

وارد کردن مشخصات هر شی در view کار خسته کننده ای است . Auto mapper راه حل همچین مسائلی است .

روش کار آن :
Automapper  یک شی از شی مرتب کننده (The object mapper) است . مرتب سازی شی-شی با فرستادن ورودی یک شی با یک نوع به خروجی یک شی با نوع متفاوت ، کار می کند .



بنابراین ، Automapper بین منبع و مقصد شی قرار میگیرد .
حالا ، در یک پروژه کنسول ، nuget package automapper را اضافه کنید .

بعضی مواقع ، ممکنه با اشکالاتی نظیر زیر مواجه بشوید . که این به دلیل سازگار نبودن نسخه 
nuget package manager و automapper version .




شما میتوانید بصورت مستقیم نسخه یایین تری از Automapper را با استفاده از package manager console - با نصب کردن Package AutoMapper - Version 3.3.1.



حالا ، دو کلاس ایجاد میکنیم .

public class Person {  
    public string FirstName {  
        get;  
        set;  
    }  
    public string LastName {  
        get;  
        set;  
    }  
    public string UID {  
        get;  
        set;  
    }  
    public DateTime DateOfBirth {  
        get;  
        set;  
    }  
}  
And  
public class PersonDTO {  
    public string FirstName {  
        get;  
        set;  
    }  
    public string LastName {  
        get;  
        set;  
    }  
    public string UID {  
        get;  
        set;  
    }  
    public DateTime DateOfBirth {  
        get;  
        set;  
    }  
}  

همانطور که مشاهد میکنید هر دو کلاس دارای خصوصیات مشترکی هستند . به کمک Automapper ، ما میتونیم مقادیر مشخصات یک شی را به یک شی دیگر ارسال کنیم . که در زیر چگونگی این کار را نشان میدهیم :

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
using AutoMapper;  
namespace NInjectSample2 {  
    class Program {  
        static void Main(string[] args) {  
            Mapper.CreateMap < Person, PersonDTO > ();  
            Person pr = new Person() {  
                FirstName = "Vivek",  
                    LastName = "Tripathi",  
                    UID = "VT001"  
            };  
            //PersonDTO prDTO = Mapper.Map(pr, new PersonDTO());  
            PersonDTO prDTO = Mapper.Map < Person, PersonDTO > (pr);  
            Console.WriteLine("DTO - Name - " + prDTO.FirstName + " Lastname - " + prDTO.LastName + " - UID -" + prDTO.UID);  
            Console.ReadKey();  
        }  
    }  
}  


در ادامه مثال های پیچیده تری را داریم . فرض کنید ، که ما DTO یک FullName.Property را داریم که این ترکیبی از اسم و فامیلی مشتری ها است .

public string FullName { get; set; }

ما مجبوریم که بعضی چیز ها را در Createmap تغییر دهیم . 

Mapper.CreateMap<Person, PersonDTO>().ForMember(s => s.FullName, d => d.MapFrom(v => v.FirstName + " " + v.LastName));

 

با این کار ، میتوانیم تغییرات را مشاهده کنیم .

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 5 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید