2016-04-07 26 views
3

giriş görünümü modeli:Otomatik Yanıtlayıcı eşlemesinde bir kaynak özelliğinin orijinal değeri nasıl saklanır?

public class FacilityInputModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

alanı modeli:

public class FacilityInputModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string OriginalName { get; set; } 
} 

Ben kullanıcıların bir tesisin adını değiştirmek ama hala orijinal adını tutmak için izin vermek. oluştururken

Say tesis (Sadece kolaylık json yazıyorum)

{id:1, name='Facility1', originalName='Facility1'} 

olduğunu.

Adını bir FacilityInputModel göndererek değiştireceğim. C# kodunda

{id:1, name='Facility2'} 

varlık güncellemek için:

var entity = _repository.Find(id); 
_repository.Detach(entity); 
entity = Mapper.Map<Facility>(model); 

_repository.Update(entity); 
_repository.Save(); 

entity ben haritalama sonrasında, işletme

{id:1, name='Facility2', originalName=null} 
olduğunu Mapper.Map

{id:1, name='Facility1', originalName='Facility1'} 

Ama önce almakyerine benim haritalama olarak

{id:1, name='Facility2', originalName='Facility1'} 

, ben OriginalName

CreateMap<Facility, FacilityInputModel>() 
    .ReverseMap() 
    .ForMember(x => x.OriginalName, opt => opt.Ignore()); 

Ignore çalıştı Ama hiç çalışmamış. Ayrıca, yine de çalışmaz.

Buradaki soru, var olan değerlerin haritalamada silinmekten nasıl kurtulmasıdır.

{id:1, name='Facility2', originalName='Facility1'} 

cevap

3

Eğer entity = Mapper.Map<Facility>(model); çağırdığınızda tamamen yeni bir nesne alıyoruz: Ve sonrası haritalama kimliklerini kazanmaları. Mevcut biriyle eşlemek için Mapper.Map<Source, Destination>(source, destination) kullanmayı deneyin.

+0

Evet! bazı ek: tam 'Mapper.Map (kaynak, dest)' için gerek yok. AutoMapper, Mapper.Map (source, dest) 'işlemek için yeterince akıllıdır. – Blaise

+0

Aslında bu C#, smart parametrelerden jenerik türler bulmak için akıllıca;) –

+0

Bu çok güzel. Farklı sınıflardan mülkleri bir görünüm modeline eşlemek istiyorum. Sadece onları çağırın - viewmodel nesnesini her seferinde dest olarak geçirin. – markau

İlgili konular