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

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

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 5276
هوش مصنوعی

پاسخ هوش مصنوعی

Automapper یک کتابخانه مفید برای نقشه برداری بین آبجکت های مختلف در ASP.NET Core است. در اینجا یک مثال واقعی از نحوه استفاده از Automapper ارایه می شود.

ابتدا، پروژه ASP.NET Core خود را ایجاد کنید.

dotnet new webapi -n AutomapperExample
cd AutomapperExample

سپس، بسته NuGet Automapper و Automapper.Extensions.Microsoft.DependencyInjection را نصب کنید:

dotnet add package AutoMapper
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

حالا، یک مدل و یک ViewModel ایجاد کنید. مثال زیر را در پوشه Models اضافه کنید:

namespace AutomapperExample.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
}

و یک ViewModel در پوشه Models ایجاد کنید:

namespace AutomapperExample.Models
{
    public class UserDto
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }
}

حالا فایل Startup.cs را باز کرده و Automapper را در متد ConfigureServices ثبت کنید:

using AutoMapper;

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}

بعد از آن، یک پروفایل برای نقشه برداری ایجاد کنید. یک کلاس جدید به نام UserProfile در پوشه Models ایجاد کنید:

using AutoMapper;

namespace AutomapperExample.Models
{
    public class UserProfile : Profile
    {
        public UserProfile()
        {
            CreateMap();
        }
    }
}

حال بیایید یک کنترلر ایجاد کنیم تا بتوانیم از Automapper استفاده کنیم. یک کنترلر جدید به نام UsersController در پوشه Controllers ایجاد کنید:

using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using AutomapperExample.Models;
using System.Collections.Generic;
using System.Linq;

namespace AutomapperExample.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class UsersController : ControllerBase
    {
        private static List users = new List
        {
            new User { Id = 1, Name = "Alice", Email = "alice@example.com" },
            new User { Id = 2, Name = "Bob", Email = "bob@example.com" }
        };

        private readonly IMapper _mapper;

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

        [HttpGet]
        public ActionResult> GetUsers()
        {
            var userDtos = _mapper.Map>(users);
            return Ok(userDtos);
        }
    }
}

حالا، برنامه را اجرا کنید:

dotnet run

و به آدرس http://localhost:5000/users بروید. شما باید یک لیست از کاربرانی که به UserDto نقشه برداری شده اند را ببینید.

این تمام فرآیند استفاده از Automapper در ASP.NET Core است. به راحتی می توانید مودل های دیگر و روابط بیشتری را پیاده سازی کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : 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
امتیاز: 1635 رتبه: 2
1 نظر
mahmoodi : توضیحاتتون عالییییی بود.

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

من کد 

.ReverseMap()

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

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