2012-09-04 15 views
6

宛先プロパティが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()) 
  1. まずケース - 宛先プロパティ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. 第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は新しいインスタンスを作成する必要があります。

おかげで、 クリス

+0

だからあなたはUseDestinationValue以外の何かをしたい設定()メソッドでは

それがnullの場合は? – PatrickSteele

+0

はい、宛先プロパティがNULLの場合は別の処理を行います。 – cryss

+0

Auotmapperが現在行っていることとマッピングしたいものとのマッピング方法を示す作業サンプルコードを提供してください。私はちょうどあなたが求めているものを得ていない。 – PatrickSteele

答えて

関連する問題