Skip to content

Kopyalama

Umut Ozel edited this page May 8, 2017 · 5 revisions

İşte kopyalama için kullanabileceğimiz yöntemler.


  • Map metodunu iki tip parametresi ile çağırabiliriz. MapConfiguration'ın varsayılan preserveReferences ayarını da burada ezebiliriz.
public TOut Map<TIn, TOut>(TIn inObj, bool? preserveReferences = null)

// bu kopyalama için referansları koruyoruz, MapConfiguration için bu ayar kapalı (false) olsa bile
var customerDto = config.Map<Customer, CustomerDTO>(customer, true);

  • Varolan bir hedef nesneye kopyalama yapabiliriz.
public TOut MapTo<TIn, TOut>(TIn inObj, TOut outObj, bool? preserveReferences = null)

var customerDto = Session.Get<CustomerDto>(customer.Id);
customerDto = config.Map<Customer, CustomerDTO>(customer, customerDto);

  • BatMap'in tip bilgisini inObj'den almasını sağlayabiliriz.
public TOut Map<TOut>(object inObj, bool? preserveReferences = null)

var customerDto = config.Map<CustomerDTO>(customer);

  • BatMap'in hedef tipi otomatik bulmasını sağlayabiliriz. Bu metod inObj'nin tipi için en az bir kayıt yapılmış olmasını gerektirir.
public object Map(object inObj, bool? preserveReferences = null)

// BatMap kayıtlardan inObj'nin tipi için yapılmış ilkini kullanır
var customerDto = config.Map(customer);

  • BatMap'e hedef tipi açık olarak söyleyebiliriz. Bu metod tip parametreli metodları kullanamadığımız zamanlar için kullanışlıdır.
public object Map(object inObj, Type outType, bool? preserveReferences = null)

var customerDto = (CustomerDTO) config.Map(customer, typeof(CustomerDTO));

  • Tüm IEnumerable'ı kopyalayabiliriz. Bu metod her bir nesne için tek tek kopyalama işlemi yapmaktan daha hızlı çalışacaktır, çünkü BatMap arka planda MapDefinition bilgisini sadece bir kez isteyecektir ⚡️
public IEnumerable<TOut> Map<TIn, TOut>(IEnumerable<TIn> source, bool? preserveReferences = null)

var customerDtos = config.Map<Customer, CustomerDTO>(customers); 

  • IEnumerable gibi bu kopyalama işlemini sözlükler (Dictionary) için de yapabiliriz.
public Dictionary<TOutKey, TOutValue> Map<TInKey, TInValue, TOutKey, TOutValue>(
    IDictionary<TInKey, TInValue> source, bool? preserveReferences = null)

// Customer nesnesi CustomerDTO nesnesine çevirilecek
var customerDtoDict = config.Map<int, Customer, int, CustomerDTO>(customerDict);
// Bu da çalışır. Anahtar değerler de gerektiğinde kopyalanır
var customerDtoDict = config.Map<Customer, int, CustomerDTO, int>(customerDict);

Statik API

Mapper statik sınıfı yukarıdaki metodların hepsine sahiptir, sadece tek bir farklılıkla.:

public static IEnumerable<TOut> Map<TIn, TOut>(this IEnumerable<TIn> source, bool? preserveReferences = null)

customers.Map<Customer, CustomerDTO>();

IEnumerable için genişleme metodu (extension method) kullanır 💯

Yansıtma