AutoMapper Nedir, Nasıl Kullanılır ASP.NET CORE + EF CORE Örnek Anlatım

Automapper, adından da anlayabileceğiniz gibi bir objeyi başka bir objeye dönüştüren bir yapıdır. Hemen basit kullanım örneği ile sizlere bunu anlatalım.

Katmanlı bir mimari oluştururken benzer verileri tutan bir çok nesne ile uğraşırız, request gelir UserRequestDTO ile request içeriğini alırız, sonrasında ise User Enttiy oluşturur bunu veritabanına eklemeye çalışırız.

Eğer manuel bir eşleme yapacak olursak her property’i teker teker birbirine eşitleriz ve yeni nesnemizi oluştururuz.

Automapper’den önce şu şekilde ilerliyordu:

C#
public class User
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public string Email { get; set; }
}

public class UserDto
{
    public string FullName { get; set; }
    public string Email { get; set; }
}

User ve UserDto entity’leri arasında dönüşüm yapmak için şu şekilde manuel bir kodlama yapmamız gerekiyordu.

C#
var user = new User { Id = 1, FullName = "Gökhan Çelik", Email = "[email protected]" };

var dto = new UserDto
{
    FullName = user.FullName,
    Email = user.Email
};

Böylelikle User modelinden yeni bir UserDto oluşturmuış oluyorduk.

AutoMapper ile birlikte her kullanımda bu şekilde manuel uğraşmak ve kod tekrarına sebep olmak yerine bir ara metod oluşturuyoruz ve bu metod bize dönüştürüp yeni nesneyi veriyor.

Öncelikle automapper için paketimizin kurulumunu yapalım.

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

Şimdi ise User ve UserDto sınıfları arası nesneleri otomatik çevirecek mapper sınıfımızı yazalım.

📁Mappings/UserProfile.cs

C#
using AutoMapper;
using BookStore.Api.Models; // örnek namespace
using BookStore.Api.DTOs;

namespace BookStore.Api.Mappings
{
    public class UserProfile : Profile
    {
        public UserProfile()
        {
            CreateMap<User, UserDto>();
            CreateMap<UserDto, User>(); // iki yönlü istersen
        }
    }
}

Burada CreateMap ile hangi tür sınıfları birbirine dönüştürmek istediğimizi belirtiyoruz ve gerisi ile mapper ilgileniyor.

Peki diyelim ki sınıflarımızın property isimleri birbiri ile uymuyor. Bu durumda ne yapacağız?

Bu durumda da aşağıdaki gibi özelleştirmeler yapabiliriz.

C#
// Bu tamamen opsiyonal bir özelleştirme
CreateMap<User, UserDto>()
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.FullName));

Automapper sınıfımızı kullanmadan önce DI ile projemize tanıtmamız gerekiyor.

📁Program.cs

C#
builder.Services.AddAutoMapper(typeof(Program));

Peki şimdi sırada gerçek kullanım örneği var. Mapper sınıfımızı oluşturduk. Nesneleri birbirine nasıl dönüştüreceğimizi tanımladık, şimdi bunu contoller içinde kullanalım.

C#
using AutoMapper;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private readonly IMapper _mapper;

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

    [HttpGet]
    public IActionResult GetUser()
    {
        var user = new User { Id = 1, FullName = "Gökhan Çelik", Email = "[email protected]" };
        var dto = _mapper.Map<UserDto>(user);
        return Ok(dto);
    }
}

Bu şekilde basitçe User sınıfımızın nesnesini USerDto olarak dönüştürmüş olduk…

Buraya kadar yazımı okuduysanız düşüncelerinizi yorum olarak bırakmayı unutmayın.

Özet

Automapper basitçe sınıfların nesnelerini birbirine dönüştüren bir ara sınıf diyebiliriz.

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir