نمایش نتایج 1 تا 2 از 2

نام تاپیک: آمورش استفاده از AutoMapper در Asp MVC Core

  1. #1

    آمورش استفاده از AutoMapper در Asp MVC Core

    AutoMapper کتابخانه ای ساده و سبک برای نگاشت اطلاعات یک شی به شی دیگر به صورت خودکار هست و...
    فرض کنید Model ما
    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 ما

    public class UserViewModel
    {
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Password { get; set; }
    }


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

    آدرس نوگت

    PM > Install-Package AutoMapper




    و
    آدرس نوگت



    PM > Install-Package AutoMapper.Extensions.Microsoft.DependencyInjectio n -Version 2.0.1


    بعد از نصب این دو پکیچ نوبت به فراخوانی Automapper در کلاس Startup برنامه asp core می رسه :


    public void ConfigureServices(IServiceCollection services) {

    services.AddMvc();
    services.AddAutoMapper();
    }


    حالا نوبت به ساخت کلاسی که این نگاشت ها رو برای ما انجام بده میرسه که در روت پروژه خودتون باید بسازید . به طور مثال من این کلاس رو با عنوان MappingProfile.cs میسازم و از
    Profile مشتق می کنم :


    public class MappingProfile : Profile {
    public MappingProfile() {
    // Add as many of these lines as you need to map your objects
    CreateMap<User, UserViewModel>();

    }
    }

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

    public class UserController : Controller {


    private readonly IMapper _mapper;


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

    public async Task<IActionResult> Edit(string id) {


    var user = await _context.Users
    .SingleOrDefaultAsync(u => u.Id == id);


    var model = _mapper.Map<User, UserViewModel>(user);


    }
    }

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

  2. #2

    نقل قول: آمورش استفاده از AutoMapper در Asp MVC Core

    برای کارکرد درست پروژه و کد نویسی اصولی دقیقا باید از راه های اصولیبهره گرفت. در حال حاضر من هم در تهیه یک پترن که از ساختار اصلی Domain Deriven Design بهره میگیره هستم. البته بحث
    Mapping رو از AutoMapper استفاده نکردم. بلکه در فریم ورکی که دارم ایجاد میکنم پیاده سازیش کردم .که عملا دستم باز تر هستش. یه همچین ساختاری میشه


    namespace ApplicationServiceTest.ApplicationService
    {
    public class PersonApplicationService : BaseApplicationService<Person, PersonDto, IPersonService>, IPersonApplicationService
    {

    public PersonApplicationService(IPersonService baseService, IUnitOfWork unitOfwork, IEntityMapper<Person, PersonDto> mapper) : base(baseService, unitOfwork, mapper)
    {
    }


    public IList<PersonDto> GetAllDto()
    {
    var res = BaseService.GetAll();
    IList<PersonDto> lst = new List<PersonDto>();
    //Sample 1
    res.ToList().ForEach(item => { lst.Add(item: Mapper.MapTo(item)); });






    //Sample 2
    //foreach (var item in res.ToList())
    //{
    // lst.Add(item: Mapper.MapTo(item));
    //}
    return res.Select(s => Mapper.MapTo(s)).ToList();
    }
    }
    }



    و در کهاین کد بالا از IEntityMapper بهره میگره که در Base دیدمش. و در نهایت فضای داخلی Mapper جهت ایجاد و و حذف وویرایش از CreatForm و برای بازگردانی اطلاعات از دامین به Dto از MapTo استفاده میکنه


    using ApplicationServiceTest.DomainDto;using DomainModelTest;
    using Jir.ApplicationServices.EntityMapper;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;


    namespace ApplicationServiceTest.ApplicationService
    {
    public class PersonMapper : IEntityMapper<Person, PersonDto>
    {
    private PersonDto objPerson;
    public Person CreateFrom(PersonDto destination)
    {
    return new Person(destination.Id, destination.UserId, destination.Name, destination.Family);
    }

    public PersonDto MapTo(Person source)
    {
    objPerson = new PersonDto();

    if (objPerson != null)
    {
    objPerson.Id = source.ID;
    objPerson.UserId = source.UserID;
    objPerson.Name = source.Name;
    objPerson.Family = source.Family;
    }
    return objPerson; // return a null objcet from any instance
    }
    }
    }



تاپیک های مشابه

  1. سوال: استفاده از wwf در asp.net mvc
    نوشته شده توسط Eslami_83 در بخش ASP.NET MVC
    پاسخ: 0
    آخرین پست: شنبه 08 بهمن 1390, 23:32 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •