AutoMapper

03/01/2026 22:59:49
  • 17 min okuma
Automapper,.net core,C#

AutoMapper; farklı veri nesnelerinin otomatik olarak eşleştirilerek dönüştürülmesini ve kopyalanmasını kolaylaştıran bir kütüphanedir. Bu işlem genellikle veri tabanından okunan verilerin uygulama içi nesnelerle kullanılması veya uygulama içi nesnelerin veri tabanına yazılması sırasında gerçekleştirilir.

AutoMapper in .NET

AutoMapper, veri nesnelerinden daha yüksek seviyede nesneler oluşturmak veya daha düşük seviyede veri nesnelerine dönüştürmek için kullanılabilir. Ayrıca, veri nesnelerinin herhangi bir değişiklik yapıldığında, AutoMapper ile yazılmış kodların da otomatik olarak güncellenmesi sağlanır.

AutoMapper Kullanımı

.NET Core’da AutoMapper kütüphanesini eklemek için Package Manager Console’da aşağıdaki komutu çalıştırabiliriz:

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

(Yukarıdaki komutları yazdığımızda iki paketin de son versiyonları projemize eklenmiş olur.)

*İlgili paketler için belirli bir versiyonu yüklemek için ise;

  • dotnet add package AutoMapper --version 11.0.1
  • dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection --version 11.0.0

komutlarını kullanabiliriz.

Veya;

  1. Projenizin Solution Explorer penceresinde, projenize sağ tıklayın ve “Manage NuGet Packages” seçeneğini seçin.
  2. NuGet Package Manager penceresi açıldığında, “Browse” sekmesine geçin.
  3. “AutoMapper” arama kutusuna yazın ve arama sonuçları arasından Automapper kütüphanesini seçin.
  4. “Install” düğmesine tıklayın ve kurulum işlemini tamamlamak için talimatları izleyin.
  5. Projenizin referanslar bölümüne Automapper kütüphanesi eklenmiş olacaktır.

Proje içerisindeki tüm sınıfların AutoMapper tarafından kullanılmasını sağlamak için “Startup.cs” sınıfı içerisindeki “ConfigureServices” metoduna aşağıdaki kodun eklenmesi gereklidir.

public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(Assembly.GetExecutingAssembly());
}

Yukarıdaki yöntem ile AutoMapper eklemesini projemize yapmış oluyoruz.

Kod örneği:

Employee isimli bir class’ımız olsun. İlgili sınıf çalışanlar ile ilgili temel bilgileri içeren alanlara sahip olsun:

public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}

Employee sınıfındaki bilgilerin uygulamanın diğer alanlarında kullanılması için EmployeeDTO sınıfını oluşturalım:

public class EmployeeDTO
{
public int Id { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}

DTO(Data Transfer Object): veri taşıma işlemleri için tasarlanmış bir tasarım desenidir. Bu tasarım deseni, uygulamanın farklı modülleri arasında veri taşımak için kullanılır. Örneğin, bir web uygulamasının arka ucunda veritabanından okunan veriler, ön ucunda görüntülenmek üzere kullanıcıya iletilir. Bu veriler, DTO objeleri aracılığıyla taşınır.

DTO objelerinin kullanımı, veri nakli işlemleri sırasında veri güvenliğini arttırır. Çünkü DTO objeleri sadece gerekli verileri içerir ve işlenmiş verileri içermez, bu nedenle veritabanına erişim yetkisi olan kullanıcılar sadece gerekli verileri görür ve işleyemez.

Employee ile EmployeeDTO class’ları arasındaki veriyi “AutoMapper” aracılığı ile kopyalamak için EmployeeProfile sınıfımızı Profile sınıfından türeterek oluşturalım:

using AutoMapper;

public class EmployeeProfile : Profile
{
public EmployeeProfile()
{
CreateMap<Employee, EmployeeDTO>();
}
}

CreateMap metodu, Employee ve EmployeeDTO sınıfları arasında bir eşleştirme yapılandırması oluşturmak için kullanılır. ForMember metodu ise, bireysel özellikler için eşleştirmeyi tanımlamak için kullanılmaktadır.

using AutoMapper;

public class EmployeeProfile : Profile
{
public EmployeeProfile()
{
CreateMap<Employee, EmployeeDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
}
}

Yukarıda yapmış olduğumuz eşleştirme işlemi ile Employee sınıfındaki “FirstName” ve “LastName” alanlarını EmployeeDTO sınıfında ”FullName” olarak birleştirebiliriz.

ReverseMap metodu ise mevcut bir dönüşümün tersini yapmak için kullanılır. Yani, bir profil tanımlarken CreateMap yöntemiyle belirli bir türden başka bir türe dönüşüm yapıyorsak, ReverseMap yöntemini kullanarak bu dönüşümün tersini otomatik olarak oluşturabiliriz.

using AutoMapper;

public class EmployeeProfile : Profile
{
public EmployeeProfile()
{
CreateMap<Employee, EmployeeDTO>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName))
.ReverseMap(); // Bu satır ile ters dönüşümü oluşturuyoruz
}
}

Son olarak AutoMapper’ı bir servis içinde kullanalım:

using System;
using System.Collections.Generic;
using System.Linq;
using AutoMapper;
using Microsoft.EntityFrameworkCore;

public class EmployeeService
{
private readonly IMapper _mapper;
private readonly DbContext _context;

public EmployeeService(IMapper mapper, DbContext context)
{
_mapper = mapper;
_context = context;
}

public List<EmployeeDTO> GetEmployees()
{
List<Employee> employeesFromDb = _context.Employees.ToList();

List<EmployeeDTO> employeeDTOs = _mapper.Map<List<EmployeeDTO>>(employeesFromDb);

return employeeDTOs;
}
}

Sonuç olarak AutoMapper kullanarak DTO sınıflarını oluşturduğumuzda, client tarafında göstermek istediğimiz alanları sınırlandırarak, gerçek nesnemizin güvenliğini sağlamış oluruz.

;

Coded By Mehmet Kelleli