25

1 つの抽象基本クラスから継承する 2 つのクラス (MVC ビュー モデル) があります。

abstract class BaseModel { }

class Car : BaseModel 
{
    public string Speed { get; set; }
}

class Camper : BaseModel
{
    public int Beds { get; set; } 
}

次のような基本クラスでAutoMapperを構成したい:

Mapper.CreateMap<BaseModel, DataDestination>();

var someObj = new DataDastination();
Mapper.Map(instanceOfBaseModel, someObj);

Automapper には Car または Camper の構成がないため、ここでエラーが発生します。次のようなものでAutomapperを構成しようとしました:

Mapper.CreateMap<BaseModel, DataDestination>()
    .ForMember(dest => dest.SomeProp, mapper => mapper.MapFrom( .... ));

MapFrom では、基本クラスのプロパティしか表示されません! BaseClass を使用するように Automapper を構成する方法と、Car と Camper の特定の ForMember 式は? たとえば、車の場合はこのプロパティを this からマッピングし、キャンピングカーの場合は別の場所からこのプロパティをマッピングします。

4

2 に答える 2

38

これは、マッピングの継承について説明しているトピックです。

以下はあなたのために働くはずです:

Mapper.CreateMap<BaseModel, DataDastination>()
    .Include<Car, DataDastination>()
    .Include<Camper, DataDastination>();//.ForMember(general mapping)
Mapper.CreateMap<Car, DataDastination>();//.ForMember(some specific mapping)
Mapper.CreateMap<Camper, DataDastination>();//.ForMember(some specific mapping)
于 2012-06-29T21:15:27.637 に答える
6

.IncludeAllDerived() を使用する

Mapper.CreateMap<BaseModel, DataDestination>().IncludeAllDerived()
Mapper.CreateMap<Car, DataDestination>();
Mapper.CreateMap<Camper, DataDestination>();
于 2020-02-14T18:32:09.583 に答える