こんにちは私は継承クラスのために働いています。 基本オブジェクトとインタフェースのマップを作成するのは一度だけです。子クラスが独自のメンバを実装する場合は、基本クラスまたはintrfaceで定義されていないメンバのマッピングをnlyに設定します。Automapper 5.1.1継承マッピング
サンプルコードから始めましょう。
public class DtoClass {
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
public interface IField3 {
public string EntityField3 { get; set; }
}
public class BaseEntityClass {
public string EntityField1 { get; set; }
}
public class ChildEntityClass : BaseEntityClass, IField3 {
public string EntityField2 { get; set; }
public string EntityField3 { get; set; }
}
CreateMap<BaseEntityClass, DtoClass>()
.ForMember(c => c.Field1 , m => m.MapFrom(a => a.EntityField1))
.Include<ChildEntityClass, DtoClass>();
CreateMap<IField3, DtoClass>()
.ForMember(c => c.Field3 , m => m.MapFrom(a => a.EntityField3));
CreateMap<ChildEntityClass, DtoClass>()
.ForMember(c => c.Field2 , m => m.MapFrom(a => a.EntityField2));
添付コードdosnt work ofcourse。呼び出すとき:
AutoMapper.Mapper.Map<ChildEntityClass, DtoClass>(instanceOfChildEntityClass);
は私だけCreateMap<ChildEntityClass, DtoClass>().
一度だけ、基本クラスのマッピングとのインターフェースを実装する方法任意のアイデアで定義されているメンバーをマッピングしますか? はい、すべてのタイプのChildEntityClass、BaseEntityClass、およびIField3をDtoClassにマップしたいと思います。
このようなマッピングをエレガントに設定するためのヒントは、歓迎します。
編集:私は明確にするため、サブクラスからunecssary IncludeBaseを削除していないが、両方
のどれも - サブクラス でIncludeBase - 基底クラスで私のために 作品を含めます。このような問題を引き起こす原因は何ですか?
これはまだ動作しません。最後に設定されたマッピングだけが呼び出され、ベースクラスのマッピングは使用されません。私のためにベースクラスに含まれていません。 もう1つの質問aoutインターフェイスは何ですか? わかりやすくするために、サンプルコードにIncludeBase <>を削除しました。 – PabloPC
Mapper.AssertConfigurationIsValid()を使用してプロファイルをテストすることを確認してください。これは、何が問題を引き起こしているのかを指摘するかもしれません。 – Richard
サンプルコードを使用して私のために働くIncludeBaseを使用して私の答えを更新しました。 – Richard