ASP.NET CORE'da AutoMapper Kullanımı

ASP.NET CORE'da AutoMapper Kullanımı

Merhaba;

Bugün sizlere ASP.NET CORE'da AutoMapper kütüphanesinin kullanımı hakkında bilgiler ve ufak tüyolar vereceğim.

AutoMapper Nedir?

AutoMapper en basit haliyle, uygulamamız içerisindeki sınıflarımızı birbirine dönüştürmek(casting) için kullandığımız bir kütüphanedir. Entitylerimiz için kullandığımız sınıfları, DTO'lara dönüştürmek buna güzel bir örnektir. Bu yazıda ilgili bir örnek yapacağız.

Kurulum

Kurulum için Nuget Package Manager aracılığıyla gerekli olan iki paketi yüklüyoruz 👇

ASP.NET CORE AutoMapper Kurulumu

alternatif olarak, package manager console'dan bu komutları çalıştırabiliriz;

dotnet add package AutoMapper

dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

Paketlerimiz kuruldu. AutoMapper kullanmak için Program.cs içerisinde tanımlamamızı yapalım.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddAutoMapper(Assembly.GetExecutingAssembly());//AutoMapper Projemize Eklendi

AutoMapper ile dönüştüreceğimiz sınıflarımızı yazmaya başlayabiliriz.
Öğrenci sınıfı ile başlıyoruz;

public class Ogrenci
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public List<Kitap> Books { get; set; }
}

Şimdi de bir kitap sınıfı oluşturalım;

public class Kitap
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int PageCount { get; set; }
    public Ogrenci Ogrenci { get; set; }
}

Burada bir ilişki tanımladık. AutoMapper içiçe sınıflarımızı da bizim için dönüştürme işlemi yapacak.
Şimdi bu sınıflarımızın dönüşeceği DTO sınıflarımızı da tanımlayalım;

public class OgrenciDTO
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public List<KitapDTO> Books { get; set; }
}
public class KitapDTO
{
    public string Name { get; set; }
}

AutoMapper hangi sınıflarımız ile çalışacağını ve nasıl dönüşümler yapacağını anlayabilmek için bir sınıfa ihtiyaç duyar. Gelin hep beraber bu sınıfı da tanımlayalım;

public class Mappings:Profile
{
    public Mappings()
    {
        CreateMap<Kitap,KitapDTO>().ReverseMap();
        CreateMap<Ogrenci,OgrenciDTO>()
            .ForMember(x=>x.FullName,option => option.MapFrom(y=>$"{y.FirstName} {y.LastName}")).ReverseMap();
    }
}

Burada anlamamız gereken bazı noktalar var.

CreateMap : Dönüşüm için kaynak ve hedef sınıflarımızı belirliyoruz.
ReverseMap(): Dönüşümlerin tersine de yapılabilmesi için kullanıyoruz. Bunun yerine yeni bir CreateMap kullanabilirdik ama ReverseMap daha kullanışlı.
ForMember(),MapFrom(): Bu bölümde dönüşüm için AutoMapper'a bir önayar belirliyoruz. Ad ve soyad bilgisini tek bir property aracılığıyla almak istediğimizi belirtiyoruz.

Artık hazırız! AutoMapper testimize başlamak için Controller içerisinde DependencyInjection ile mapper'ımızı tanımlayarak bir endpoint oluşturalım;

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

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

    [HttpGet]
    public async Task Get()
    {
        Ogrenci ogr = new Ogrenci
        {
            Id = 1,
            FirstName = "İsmet",
            LastName = "Ataklı",
            Age = 29,
            Books = new List
            {
                new Kitap
                {
                    Id = 1,
                    Name = "Kitap1",
                    PageCount = 500,
                },
                new Kitap
                {
                    Id = 2,
                    Name = "Kitap2",
                    PageCount = 500,
                }
            }
        };

        var dto = _mapper.Map<OgrenciDTO>(ogr);
        return Ok(dto);
    }
}

Nesnemizi oluşturduktan sonra _mapper.Map fonksiyonu ile ogr nesnesini bir OgrenciDTO nesnesine dönüştürdük.

Projemizi çalıştıralım ve istek yapalım;

AutoMapper Test Sonucu 

Görüldüğü üzere oluşturduğumuz sınıf Ogrenci sınıfı olmasına rağmen OgrenciDTO sınıfından bir nesne aldık. Ogrenci içerisindeki Kitap nesnelerinin de KitapDTO nesnelerine dönüştüğünü gördük.

Github projesine buradan ulaşabilirsiniz.

Bugün AutoMapper'ı uygulamamıza nasıl entegre edeceğimize ve nasıl çalıştıracağımıza dair bir örnek uygulama gerçekleştirdik.
Sabırla okuduğunuz için teşekkür eder bol kodlu günler dilerim🤩

Kategoriler