2016-12-05 2 views
1

エンティティの定義が変更できる一時的なシステムを設計しています。私はAutomapperをセットアップしようとしていますが、プレフィックスがどのように動作するのかは分かりません。Automapperソースプレフィックスプロパティ

例として、私は、次のエンティティだろう:以下DTOと

public class ReferenceDataDefinition 
{ 
    public string Name { get; set; } 
} 

public class ReferenceData 
{ 
    public int Id { get; set; } 
    public ReferenceDataDefinition Current { get; set; } 
} 

public class ReferenceDataDTO 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

を私は

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Id, o => o.MapFrom(s => s.Id) 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

を使用することができます知っている。しかし、私はそこに感じます私は何ができるよりスマートにする必要がありますか? RecognizePrefixes( "Current")を追加しようとしましたが効果がありませんでした。

答えて

1

私はRecognizePrefixesを追加しようとしました: Recognizing pre/postfixes またRecognizePrefixesは、ソースオブジェクトのプレフィックス 使用RecognizeDestinationPrefixes方法

チェックこれらの以前の記事のために働くの"現在")

これはプレフィックスの使用方法ではありません。プロパティは接頭辞で始まります(多くの場合、データベース命名スキーマが原因です)。例えば

あなたは以下のクラスがあった場合、:

public class ReferenceData 
{ 
    public int Ref_Id { get; set; } 
    public string Ref_Name { get; set; } 
} 

public class ReferenceDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

を次の接頭辞を認識することができる:

cfg.RecognizePrefixes("Ref_"); 

AutoMapperは、あなたが定義することなく、これら2つのオブジェクトをマッピングすることができるだろう.ForMemberでの特定のマッピング。

ReferenceDataReferenceDataDTOの両方Id性質が同じ名前を持っているので、あなたは、マッピングを所有について、あなたはAutoMapperとID部材のマッピングを削除することができるはずそれを自動的に推測することができます。

CreateMap<ReferenceData, ReferenceDataDTO>() 
    .ForMember(p => p.Name, o => o.MapFrom(s => s.Current.Name); 

これで十分です。

.Currentの場合、Flatteningを使用すると、DTOクラスを変更してCurrentNameに名前を変更すると削除できます。