宛先プロパティがnull
でない場合にのみ、UseDestinationValue
メソッドの動作を使用する場合にAutoMapperマッピングを構成する方法。宛先プロパティがnullでない場合にのみUseDestinationValue
そのような何か:
Mapper.CreateMap<Item, ItemViewModel>()
.ForMember(x => x.Details, _ => _.UseDestinationValue(dontUseWhenNullDestination: true))
EDIT
使い方の今の例。私はItemViewModel
クラスを持っており、それをItem
クラスにマップしたいと思います。
マッピングの設定:
Mapper.CreateMap<Item, ItemViewModel>()
.ForMember(x => x.Details, _ => _.UseDestinationValue())
まずケース - 宛先プロパティ
Item.Details
プロパティは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
プロパティを設定します。第2のケース - 宛先プロパティ
Item.Details
プロパティがNULLです。今私はAutoMapper このnullインスタンスを使用しないようにしたいが、新しいインスタンスを作成する。問題は、このケースを考慮に入れてマッピングを設定する方法です。マッピングした後、item.Details
プロパティはnullになりますので、ここで私が原因でnull
あるUseDestinationValue
の利用(、問題を抱えているvar item = new Item { Details = null }; var itemViewModel = new ItemViewModel { Details = new DetailsViewModel { Info = "New text" } }; Mapper.Map(itemViewModel, item);
PROBLEM
:
ロジックは次のようになりますこの場合)。
NHibernateの
理由は、データベースからエンティティを取得した後、プロキシに格納します。したがって、ロードされたオブジェクトのDetails
プロパティは、タイプがItemDetails
ではなく、ItemDetailsNHibernateProxy
なので、この既存のオブジェクトを後でデータベースに保存するときにこのタイプを使用する必要があります。しかし、このプロパティがnull
の場合、null宛先値を使用できないため、Automapperは新しいインスタンスを作成する必要があります。
おかげで、 クリス
だからあなたはUseDestinationValue以外の何かをしたい設定()メソッドでは
それがnullの場合は? – PatrickSteele
はい、宛先プロパティがNULLの場合は別の処理を行います。 – cryss
Auotmapperが現在行っていることとマッピングしたいものとのマッピング方法を示す作業サンプルコードを提供してください。私はちょうどあなたが求めているものを得ていない。 – PatrickSteele