Makale Özeti

AutoMapper kullanımı

Makale

Çok kolonlu bir tablomuz olduğunu düşünelim. Çeşitli sorgularla dönen bu verileri kullanırız. Fakat her zaman dönen tüm bilgilere ihtiyacımız olmayabilir. Örneğin dönen 30 satırdan bazen 4 5 satırı kullanıcı tarafında gösteririz. Bu durumda kendi oluşturduğumuz POJO nesnemiz arasında bir map işlemi yaparız.

Bir örnekle açıklayalım. Ogrenci modelimiz var. Bu model birebir veritabanındaki tablonun karşılığı olsun.

 

1 public class Ogrenci
2     {
3         public int Id { getset; }
4         public string Ad { getset; }
5         public string Soyad { getset; }
6         public string Sehir { getset; }
7         public string Ilce { getset; }
8         public string Bolum { getset; }
9     }

 

Pojo nesnemiz aşağıdaki gibi olsun. Aslında aralarında çok aşırı bir fark. Siz Ogrenci modelinin en az 30 satırdan oluştuğunu hayal edin :) Benim kullanmak istediğim alanlar aşağıdaki gibi olsun.

 

1 public class OgrenciDto
2     {
3         public int Id { getset; }
4         public string Ad { getset; }
5         public string Soyad { getset; }
6         public string DogumYeri { getset; }
7     }

 

Normal şekilde map işlemini resimdeki gibi yapıyoruz. Tüm alanları karşılıklı eşliyoruz. Oluşan ogrenciDto sınıfını kullanıyoruz. Pojo sınıfımızın elemanları daha fazla olsaydı bu iş bizi biraz uğraştıracaktı.
RMZ_8208

Derdimiz uzun uzun yapılan bu işlemi kısaltmak. Bu noktada AutoMapper imdadımıza yetişiyor.Referansı
Nuget ile projeye ekleyebilirsiniz.
Install-Package AutoMapper

Yaptığı iş ise belirttiğimiz kurallar doğrultusunda mapleme işimi otomatik hale getirmek.
En basit kullanımı gösterelim. CreateMap metodu ile hangi 2 nesne arasında mapleme yapacağımızı belirtiyoruz.
Bunu projenin başlangıç yerinde bir kereye mahsus tanımlayabilirsiniz. Mesela mvc projesinde global.asax içinde bunu yapabilirsiniz. Veritabanından gelen öğrenci bilgilerini OgrenciDto sınıfına mapliyoruz. Sınıfların özellikleri( Id, Ad ) aynı olduğundan ekstra bişey yapmaya gerek yok.

 

1 Mapper.CreateMap<Ogrenci, OgrenciDto>();
2  
3 var ogrenci = OgrenciBilgileriniGetir(1);
4 var ogrenciDto = Mapper.Map<OgrenciDto>(ogrenci);


RMZ_8208

 

Şimdi map işlemini biraz daha özelleştirelim. Mesela il ilçeyi birleştirip tek seferde DogumYeri için kullanalım.

 

1 Mapper.CreateMap<Ogrenci, OgrenciDto>()
2     .ForMember(
3     hedef => hedef.DogumYeri,
4     ayar => ayar.MapFrom(kaynak => kaynak.Sehir + "-" + kaynak.Ilce));
5  
6 var ogrenci = OgrenciBilgileriniGetir(1);
7 var ogrenciDto = Mapper.Map<OgrenciDto>(ogrenci);

 

RMZ_8208

Gördüğünüz gibi autoMapper işimizi çok kolaylaştırıyor ve uzun uzun kod yazma zahmetinden bizi kurtarıyor.
Yaptıklarımız başlangıç düzeyinde örneklerdi. Daha detaylı bilgiye burdan ulaşabilirsiniz.
İyi çalışmalar.