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())
İ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 sadeceitem.Details.Info
özelliğini ayarlayın çünkü.İ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ındaitem.Details
mülkiyet (çünkünull
olanUseDestinationValue
kullanımının boş olacak, çünkü bir sorun var Buradavar 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
Yani UseDestinationValue dışında bir şey yapmak istiyorsunuz
Ben benzer kod ile sona erdi Eğer boşsa? – PatrickSteele
Evet, hedef özellik NULL olduğunda başka bir şey yapmak istiyorum. – cryss
Bazı şeylerin nasıl eşlenmesini istediğinizi gösteren bir örnek çalışma kodu verebilir misiniz? Sadece sorduğun şeyi almıyorum. – PatrickSteele