如果要使用UseDestinationValue
方法中的行爲,但僅在目標屬性不是null
時,如何配置AutoMapper映射。僅在目標屬性不爲空時使用目標值
類似的東西:
Mapper.CreateMap<Item, ItemViewModel>()
.ForMember(x => x.Details, _ => _.UseDestinationValue(dontUseWhenNullDestination: true))
編輯使用的
現在例子。我有一個ItemViewModel
班,我想將它映射到Item
班。
映像配置:
Mapper.CreateMap<Item, ItemViewModel>()
.ForMember(x => x.Details, _ => _.UseDestinationValue())
第一種情況 - 目的地屬性
Item.Details
屬性是NOT NULL。現在我想讓AutoMapper 使用這個Details
屬性的目標實例,因爲它不爲空。和邏輯是這樣的:
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
存在,將離開item.Details
實例並設置只item.Details.Info
屬性。第二種情況 - 目標屬性
Item.Details
屬性爲NULL。現在我想讓AutoMapper 不要使用這個空實例,而是創建一個新實例。問題是如何配置映射來考慮這種情況?的邏輯是這樣的:
var item = new Item { Details = null }; var itemViewModel = new ItemViewModel { Details = new DetailsViewModel { Info = "New text" } }; Mapper.Map(itemViewModel, item);
問題
在這裏,我有一個問題,因爲映射之後,
item.Details
屬性將爲null(因爲UseDestinationValue
用法是null
在這個案例)。
原因
NHibernate的,從數據庫中獲取實體後,將其放入一個代理。因此,加載對象的Details
屬性不是一個類型:ItemDetails
,但是ItemDetailsNHibernateProxy
- 所以我必須使用此類型,以便稍後將此現有對象保存到數據庫。但是,如果此屬性爲null
,那麼我無法使用空目標值,因此Automapper應創建一個新實例。
謝謝, 克里斯
所以,做你想要做的比UseDestinationValue以外的東西如果它爲空? – PatrickSteele
是的,我想在目標屬性爲空時做其他事情。 – cryss
您能否提供一些有效的示例代碼,向您展示如何映射事物與Auotmapper目前的功能。我只是不明白你在問什麼。 – PatrickSteele