具有基类和实现的不同配置选项的自动映射器

Hrv*_*udo 20 .net c# automapper

我有两个类(MVC视图模型),它继承自一个抽象基类.

abstract class BaseModel { }

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

class Camper : BaseModel
{
    public int Beds { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

并希望使用基类配置AutoMapper,如:

Mapper.CreateMap<BaseModel, DataDestination>();

var someObj = new DataDastination();
Mapper.Map(instanceOfBaseModel, someObj);
Run Code Online (Sandbox Code Playgroud)

在这里我得到错误,因为Automapper没有Car或Camper的配置.尝试使用以下内容配置Automapper:

Mapper.CreateMap<BaseModel, DataDestination>()
    .ForMember(dest => dest.SomeProp, mapper => mapper.MapFrom( .... ));
Run Code Online (Sandbox Code Playgroud)

在MapFrom中,我只看到基类的属性!如何配置Automapper以使用BaseClass,以及Car和Camper的特定ForMember表达式?例如,如果它是Car,则从此映射此属性,如果它是Camper,则从其他位置映射此属性.

k0s*_*tya 33

以下是描述映射继承的主题.

以下内容对您有用:

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)
Run Code Online (Sandbox Code Playgroud)


jim*_*ebe 6

使用 .IncludeAllDerived()

Mapper.CreateMap<BaseModel, DataDestination>().IncludeAllDerived()
Mapper.CreateMap<Car, DataDestination>();
Mapper.CreateMap<Camper, DataDestination>();
Run Code Online (Sandbox Code Playgroud)