2012-09-04 9 views
6

UseDestinationValue yönteminden davranış kullanmak istediğimde AutoMapper eşlemesi nasıl yapılandırılır, ancak yalnızca hedef özelliği null DEĞİLDİR. BöyleUseDestinationValue yalnızca hedef özelliği boş olmadığında

şey:

Mapper.CreateMap<Item, ItemViewModel>() 
    .ForMember(x => x.Details, _ => _.UseDestinationValue(dontUseWhenNullDestination: true)) 

DÜZENLEME kullanımının

class ItemDetails { 
    public string Info { get; set; } 
    public string ImportantData { get; set; } // only in Domain, not in ViewModel 
} 

class Item { 
    public ItemDetails Details { get; set; } 
} 

class ItemDetailsViewModel { 
    public string Info { get; set; } 
} 

class ItemViewModel { 
    public ItemDetailsViewModel Details { get; set; } 
} 

Şimdi bir örnek. ItemViewModel sınıfım var ve onu Item sınıfına eşlemek istiyorum.

Haritalama yapılandırma:

Mapper.CreateMap<Item, ItemViewModel>() 
     .ForMember(x => x.Details, _ => _.UseDestinationValue()) 
  1. İlk vaka - Hedef özelliği Item.Details mülkiyet NULL DEĞİLDİR. Şimdi,Details özelliğinin bu hedef örneğini kullanmak için AutoMapper olmasını istiyorum, çünkü boş değil.

    Ve mantık şuna benzer:

    var item = new Item { 
        Details = new Details { 
         Info = "Old text", 
         ImportantData = "Data" 
        } 
    }; 
    
    var itemViewModel = new ItemViewModel { 
        Details = new DetailsViewModel { 
         Info = "New text" 
        } 
    };  
    
    Mapper.Map(itemViewModel, item); 
    

    AutoMapper, UseDestinationValue varlığının, item.Details örneğini bırakın ve sadece item.Details.Info özelliğini ayarlayın çünkü.

  2. İkinci kasa - hedef özellik Item.Details property is NULL. Şimdi AutoMapper 'un null örneğini kullanmamasını istiyorum, ancak yeni bir tane oluşturun. Soru, bu durumu dikkate almak için haritalamayı nasıl yapılandıracağız? haritalama sonrasında item.Details mülkiyet (çünkü null olan UseDestinationValue kullanımının boş olacak, çünkü bir sorun var Burada

    var item = new Item { 
        Details = null 
    }; 
    
    var itemViewModel = new ItemViewModel { 
        Details = new DetailsViewModel { 
         Info = "New text" 
        } 
    }; 
    
    Mapper.Map(itemViewModel, item); 
    

    SORUN:

    mantık şöyle bu durum).

NHibernate, veritabanından varlık aldıktan sonra, bir proxy içine koyar NEDENİ. Yüklü bir nesnenin Details özelliği, bir tür değil: ItemDetails, ancak ItemDetailsNHibernateProxy - bu nedenle, bu varolan nesneyi daha sonra veritabanına kaydetmek istediğimde, bu tür kullanmak zorundayım. Ancak, bu özellik null ise, boş bir hedef değeri kullanamıyorum, bu nedenle Otomatik oluşturucu yeni bir örnek oluşturmalıdır.

sayesinde Chris

+0

Yani UseDestinationValue dışında bir şey yapmak istiyorsunuz

Ben benzer kod ile sona erdi Eğer boşsa? – PatrickSteele

+0

Evet, hedef özellik NULL olduğunda başka bir şey yapmak istiyorum. – cryss

+0

Bazı şeylerin nasıl eşlenmesini istediğinizi gösteren bir örnek çalışma kodu verebilir misiniz? Sadece sorduğun şeyi almıyorum. – PatrickSteele

cevap

İlgili konular