دسته بندی ها
14:52 1398/12/04

آموزش استفاده از Automapper در Asp.net core به صورت عملی

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 5218
پاسخ دهنده : fateme 15:08 1398/12/04

نحوه استفاده از Automapper و دلایل استفاده از اون رو می تونید توی این لینک بخونید.

اما به طور خلاصه یک مثال ساده رو براتون انجام میدم.

فرض کنید شما در پروژه خودتون یک Entity دارید با فیلدهای زیر

 

 public class Users
    {        
        public string FirstName { get; set; }
        public string Family { get; set; }
        public byte? Age { get; set; }
        public string PersonalCode { get; set; }
        public string MelliCode { get; set; }
        public string Address { get; set; }
        public string ImagePath { get; set; }
 
   {

 

البته این یک نمونه ساده هست و گاهی تعداد فیلدهای شما خیلی بیشتر میشه. حالا برای اینکه از این جدول توی پروژه خودتون استفاده کنید یک ViewModel ساختید و از اون ViewModel دارید توی View های خودتون استفاده می کنید. 

 

ViewModel هم به صورت زیر هست

 

public class UserViewmodel
    {
        public string Id { get; set; }

        [Display(Name = "نام")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "نام را وارد کنید.")]
        public string FirstName { get; set; }

        [Display(Name = "فامیلی")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "فامیلی را وارد کنید.")]
        public string Family { get; set; }

        [Display(Name = "کد پرسنلی")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "کد پرسنلی را وارد کنید.")]
        public string PersonalCode { get; set; }

        [Display(Name = "کد ملی")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "کد ملی را وارد کنید.")]
        [RegularExpression("^[0-9]*$", ErrorMessage = "فرمت کد ملی صحیح نیست")]
        public string MelliCode { get; set; }

        [Display(Name = "ایمیل")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "ایمیل وارد نشده است.")]
        public string Email { get; set; }

        [Display(Name = "موبایل")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "شماره موبایل را وارد کنید.")]
        public string PhoneNumber { get; set; }

        [Display(Name = "نام کاربری")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "نام کاربری را وارد کنید.")]
        public string UserName { get; set; }

        [Display(Name = "آدرس")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "آدرس را وارد کنید.")]
        public string Address { get; set; }

        [Display(Name = "جنسیت")]
        public byte Gender { get; set; }


        [Display(Name = "تصویر")]
        public string ImagePath { get; set; }

   

    }

 

خب در Controller پروژه وقتی که می خواید اطلاعات رو از سمت View به سمت Controller ارسال کنید شما باید یک model ارسال کنید که مدل شما همون ViewModel هست. پس اطلاعات موجود در ViewModel رو به سمت سرور ارسال می کنید و حالا باید این اطلاعات رو بریزید داخل Entity یا همون جدول Users که برای انجام این کار باید تک تک فیلدها رو مقدار دهی کنید. در واقع یک چیزی مشابه دستورات زیر رو باید انجام بدید.

 

       UserViewModel model = new UserViewModel();
       var user = new Users
                    {
                        FirstName = model.FirstName,
                        Family = model.Family,
                        PersonalCode = model.PersonalCode,
                        MelliCode = model.MelliCode,
                        Email = model.Email,
                        UserName = model.UserName,
                        Address = model.Address,
                        BirthDayDate = model.BirthDayDate,
                        Gender = r1,
                        IsActive = 1,
                        RegisterDate = DateTime.Now,
                        ImagePath = userimgName
                    };

 

حالا اگر فرض کنید که تعداد فیلدهاتون خیلی زیاد باشه کدنویسی شما هم خیلی زیاد میشه. پس در این حالت برای این مقادیر رو از یک ViewModel به درون یک Model بریزید میتونید خیلی راحت از Automapper ها استفاده کنید.

 

آموزش استفاده از Automapper در Asp.net core

مرحله اول

در مرحله اول باید پکیج زیر رو به پروژه از طریق nuget اضافه کنید

 

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 7.0.0

 

بعد از اون فایل startup.cs رو باز کنید و در متد ConfigureServices کد زیر رو اضافه کنید

 

services.AddAutoMapper(typeof(Startup));

 

حالا یک پوشه به نام AutoMapper ایجاد کنید و درون این پوشه یک کلاس به نام AutoMapping ایجاد کنید و کد زیر رو داخلش بنویسید

 

    public class AutoMapping : Profile
    {
        public AutoMapping()
        {
            CreateMap<Users, UserViewmodel>().ReverseMap();
        }
    }

 

به تصویر زیر دقت کنید

 

استفاده از automapper در asp.net core

 

تا اینجای کار پروژه آماده استفاده از Automapper در Asp.net core می باشد. حالا باید در کنترلر از این قابلیت استفاده کنید.

با استفاده از کد زیر می توانید به راحتی از Automapper استفاده کنید و مقادیر متناظر بین ViewModel و جدول خودتون رو مقدار دهی کنید

 

using AutoMapper;

public class UserController
{
    private readonly IMapper _mapper;

    public UserController(IMapper mapper)
    {
        _mapper = mapper;
    }
    

        [HttpPost]
        public IActionResult AddUser(UserViewModel model)
        {
            var mapModel = _mapper.Map<Users>(model);

        }

}

 

در اینجا مقدار متغیر model همان UserViewModel می باشد.

به این پاسخ امتیاز بدهید    3
امتیاز: 1617 رتبه: 2
1 نظر
mahmoodi : توضیحاتتون عالییییی بود.

امتیاز کاربر : 0   رتبه کاربر : 7018   تاریخ ثبت : 01:18 1401/06/11
پاسخ دهنده : mehdisahandi 23:21 1402/03/22

من کد 

.ReverseMap()

ننوشتم ولی کار میکنه. فرقش چیه؟

به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7018
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود