.net Core AutoMapper Kullanımı
c# kullanırken bazı durumlarda database içerisinden aldığımız verinin tüm alanlarıyla birlikte Client tarafına göndermek istemeyiz, örneğin kullanıcının sadece adı ve soyadını gösterdiğimiz bir sayfada kullanıcın diğer bilgilerinin de Client’a gönderilmesi maaliyetli olabilmektedir bu sorundan kurtulmak için DTO(Data Transfer Object) kullanılarak yeni bir sınıfa ilgili veriler maplenerek aktarılır ve Client’a yeni oluşturulan Model(Obje,Sınıf..) gönderilir. c# da bunun için AutoMapper paketini kullanıyor olacağız .Şimdi bir örnek yaparak daha iyi anlamaya çalışalım.
Proje Oluşturma
dotnet new webapi
diyerek boş bir webapi projesi oluşturuyorum. Projeyi oluşturduktan sonra
Dto(Data Transfer Object) adından bir sınıf kitaplığı oluşturuyorum, ve içerisine AutoMapping adında bir sınıf oluşturuyorum. Sınıfımı oluşturduktan sonra ilgili sınıf kitaplığıma gelip AutoMapper bağımlılığımı kuruyorum.
dotnet add package AutoMapper
Automapping sınıfımı Profile sınıfından inherit ediyorum ve consturctor oluşturup UserDto dan User sınıfına ve User sınıfından UserDto sınıfına dönüştüreceğini belirtiyorum.
public class AutoMapping :Profile{public AutoMapping(){CreateMap<UserDto, User>().ReverseMap();}
burada dikkat edilmesi gereken örneğin UserDto sınıfımda ve User sınıfımdaki alanlar aynı isime sahipse yukarıdaki gibi yapmam yeterli olacaktır ama eğer ben UserDto sınıfımda örneğin username alanını kullaniciAdidiye geriye döndermek istersem onun için şu şekilde yapmamız gerekiyor
public class AutoMapping :Profile{public AutoMapping(){CreateMap<UserDto, User>().ForMember(dest => dest.username, opt => opt.MapFrom(src => src.kullaniciAdi)).ReverseMap();}
yukarıdaki işlemde destination olan nesnemdeki username alanının source nesnemdeki kullaniciAdi olacağını belirtiyorum.
İlgili işlemimi gerçekleştirdikten sonra startup.cs dosyama gelip
services.AddAutoMapper(typeof(AutoMapping));
servise auto mapper kullanacağımı söylüyorum ve ardından herhangi bir Controller’a gelip bağımlılığımızı enjecte ediyoruz.
private readonly IMapper _mapper;
public UserController(IMapper mapper) {_mapper = mapper;}
bağımlılığımızı enject ettikten sonra istediğim herhangi bir yerde user nesnesini mapper’a verip verilen user nesnesini userDto nesnesine dönüştüreceğini söylüyorum.
User user=new User() // user alanları
var userDtoNesnesi=_mapper.Map<UserDto>(user);
görmüş olduğunuz gibi auto mapper ile bu işlemleri yapmak oldukça kolay.
Herkese İyi Çalışmalar Dilerim.