شروع کار با 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
- 3k بازدید
- 5 تشکر