نحوه کار با AutoMapper در #C

شنبه 28 فروردین 1395

گاهی اوقات در پروژه ها لازم است داده یا اطلاعات در یک شیئ را در شیئ دیگری هم داشته باشیم، به عبارت دیگر یک کپی از داده را در شیئ دیگر قرار دهیم، برای این کار استفاده از AutoMapper سرعت کار را بالا برده و از انجام کار تکراری جلوگیری می کند. در این مقاله می خواهیم نحوه کار با AutoMapper را در #C نشان دهیم.

نحوه کار با  AutoMapper در #C

نمونه بارز AutoMapper را می توان در استفاده از ViewModel ها دید، گاهی اوقات استفاده از مدل های بانک اطلاعاتی تمام نیازهای ما را برآورده نمی کند و یا ممکن است نخواهیم بعضی اطلاعات مدل بانک اطلاعاتی برای کاربر نشان داده شود از این رو از ViewModel استفاده می کنیم، ViewModel لازم است اطلاعات بانک را هم داشته باشد، به عبارت دیگر یک کپی از اطلاعات مدل بانک اطلاعاتی را داشته باشد، اگر این کار به صورت دستی انجام شود سرعت پایین آمده و در صورت تغییر کد باید تمام پروژه را جستجو کرده و کد را در همه جای پروژه تغییر دهیم. برای جلوگیری از کار تکراری از Auto-Mapper استفاده می کنیم و از طریق آن فقط یک بار عمل Map کردن را انجام می دهیم و از طریق آن لازم نیست که کد را در تک تک قسمت هایی که استفاده کرده ایم تغییر دهیم. روش کار به صورت زیر است:

ابتدا دو کلاس را به صورت زیر ایجاد می کنیم:

کلاس اول:

public class UserObject  
   {  
       public int Id;  
       public string Name;  
       public string Address;  
   } 

کلاس دوم:

public class UserAnotherObject  
{  
    public int Id;  
    public string Name;  
    public string Address;  
}

حالا اگر یک آبجکت از کلاس اول تعدادی داده داشته باشد و ما بخواهیم آن داده ها را در آبجکت دوم کپی کنیم، باید از روش زیر استفاده کنیم:

UserObject uObj = new UserObject();                         //an object of First Class  
           UserAnotherObject uAnotherObj = new UserAnotherObject();    //an object of Second   
  
           uAnotherObj.Id = uObj.Id;  
           uAnotherObj.Name = uObj.Name;  
           uAnotherObj.Address = uObj.Address;  

وقتی که تعداد Property ها زیاد شود، این کار بدون شک یک کار خسته کننده و تکراری است.

حالا برای حل این مشکل می توانیم از یک Nuget Package استفاده کنیم که Auto-Mapper نام دارد. کار آن بسیار ساده بوده و توضیح خاصی ندارد، در اینجا ایجاد یک کپی از یک شیئ به دیگری به صورت خودکار و بر اساس Datatypes و Name خصوصیت ها انجام می گیرد.

به منظور استفاده از AutoMapper ابتدا باید آن را از  Nuget Package Manager به صورتی که در زیر نشان داده شده است، نصب کنیم:

مرحله 1: در برنامه Visual Studio  خود به قسمت Manage NuGet Packages رفته و بر روی آن کلیک کنید:

مرحله 2: عبارت AutoMapper راجستجو و آن را در پروژه خود نصب کنید.

مرحله 3: سپس کتابخانه مورد نیاز را به صفحه خود اضافه کنید:

using AutoMapper.Mappers;  

حالا که این کار انجام شده است ما یک Mapper بین کلاس UserObject و کلاس UserAnotherObject ایجاد می کنیم. این عمل با استفاده از کد زیر انجام می شود:

AutoMapper.Mapper.CreateMap<UserObject, UserAnotherObject>(); 

بعد از ایجاد این Mapper تعدادی داده در آبجکت کلاس UserObject که در بالا ایجاد کردیم،قرار می دهیم:

uObj.Id = 123;  
uObj.Name = "Vipul";  
uObj.Address = "Gurgaon";

حالا ما یک سری داده داریم که می خواهیم آنها را از آبجکت کلاس UserObject به آبجکت کلاس UserAnotherObject با استفاده از AutoMapper کپی کنیم:

uAnotherObj = AutoMapper.Mapper.Map<UserAnotherObject>(uObj); 

با این کار، داده از آبجکت uObj به آبجکت uAnotherObj  به طور کامل کپی می شود.

نکته:

ما باید توجه داشته باشیم که کپی های Auto Mapper از Property ها در آبجکت مورد هدف با نام مشابه به صورت نام  Property قرار می گیرند. پس Name باید مشابه باشد اما CASE-SENSITIVE ( حساس به حروف کوچک و بزرگ نیست) نیست، برای مثال name در آبجکت مبدا می تواند id بوده و در شیئ مقصد، ID باشد.

مقادیر در شیئ مورد نظر به صورت زیر کپی می شود:

آموزش سی شارپ

فایل های ضمیمه

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

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

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

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