مقدمه ای بر AutoMapper

مقدمه ای بر AutoMapper <br/> AutoMapper کتابخانه ای ساده و سبک برای نگاشت اطلاعات یک شی به شی دیگر به صورت خودکار هست و... <br/> اگه این پست رو مطالعه کرده باشید یه مشکل امنیتی بنام «Mass Assignment» مطرح شد.برای رفع این مشکل یک روش استفاده از ViewModel بود.

AutoMapper کتابخانه ای ساده و سبک برای نگاشت اطلاعات یک شی به شی دیگر به صورت خودکار هست و...
اگه این پست رو مطالعه کرده باشید یه مشکل امنیتی بنام «Mass Assignment» مطرح شد.برای رفع این مشکل یک روش استفاده از ViewModel بود.
فرض کنید Model ما 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class User
   {
       public int Id { get; set; }
       
       public string FirstName { get; set; }
 
       public string LastName { get; set; }
 
       public string UserName { get; set; }
 
       public string Password { get; set; }
 
       public bool IsAdmin { get; set; }
 
       public virtual ICollection<BlogPost> BlogPosts { get; set; }
   }

و ViewModel ما

1
2
3
4
5
6
7
8
public class UserViewModel
   {
       public string FirstName { get; set; }
 
       public string LastName { get; set; }
 
       public string Password { get; set; }
   }

باشه(توجه کنید در واقع من برای View ی مورد نظرم فقط به نام , نام خانوادگی و پسورد نیاز دارم)
برای استفاده UserViewModel بعنوان Model در View ی مورد نظر باید شی UserViewModel رو با اطلاعات شی User مقدار دهی کنیم مثلا با کدی مثل این در کنترلر.
  

1
2
3
4
5
6
7
8
9
10
11
12
public ActionResult Index(int id = 1)
        {
            var user = _userService.GetById(id);
            var userViewModel = new UserViewModel
                {
                    FirstName = user.FirstName,
                    LastName = user.LastName,
                    Password = user.Password
                };
 
            return View(userViewModel);
        }

رهایی از نوشتن اینجور کدهای تکراری و خسته کننده باعث پیدایش AutoMapper شد...
برای استفاده از AutoMapper از نوگت استفاده میکنیم.

1
PM> Install-Package AutoMapper

در شروع برنامه نگاشت‌ها رو تعریف میکنم.یک روش ابداعی تعریف نگاشت‌ها در یک کلاس استاتیک و فراخوانی اون تو متد  Application_Start هست.

1
2
3
4
5
6
7
8
9
10
11
12
13
public static class AutoMapperWebConfiguration
    {
 
        public static void Configure()
        {
            ConfigureUserMapping();
        }
 
        private static void ConfigureUserMapping()
        {
            Mapper.CreateMap<User, UserViewModel>();
        }
    }


اولین پارامتر نوع مبدا و دومین پارامتر نوع مقصد هست.
برای انجام نگاشت هم از متد Map استفاده میکنیم.

1
2
3
4
5
6
7
8
public ActionResult Index(int id=1)
        {
            var user = _userService.GetById(id);
            var userViewModel=new UserViewModel();
            AutoMapper.Mapper.Map(user, userViewModel);
             
            return View(userViewModel);
        }

همنطور که میبنید با نوشتن چندین خط کد عملیات نگاشت اطلاعات یک شی به شی دیگه انجام شد.
ادامه دارد...