شروع کار با Automapper
پنجشنبه 21 مرداد 1395در این مقاله قصد داریم تا یک آشنایی ابتدایی با 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));![]()
با این کار ، میتوانیم تغییرات را مشاهده کنیم .
آموزش سی شارپ
- C#.net
- 4k بازدید
- 5 تشکر