25

我有两个类(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 中,我只看到基类的属性!如何配置 Automapper 以使用 BaseClass,以及 Car 和 Camper 的特定 ForMember 表达式?例如,如果是 Car,则从 this 映射此属性,如果是 Camper,则从其他位置映射此属性。

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 回答