(AutoMapper)如何映射具有不同对象列表的对象?

时间:2015-08-06 07:46:34

标签: c# asp.net-mvc automapper

我有一个LearningElement:

public class LearningElement
{
  public int Id { get; set; }
}

以及某些学习要素:

public class Course : LearningElement
{
  public string Content { get; set; }
}

public class Question: LearningElement
{
  public string Statement { get; set; }
}

现在我有一个可以有很多学习元素的阵型:

public class Formation 
{
  public ICollection<LearningElement> Elements { get; set; }
}

最后我的观点模型:

public class LearningElementModel
{
  public int Id { get; set; }
}

public class CourseModel : LearningElementModel
{
  public string Content { get; set; }
}

public class QuestionModel: LearningElementModel
{
  public string Statement { get; set; }
}

public class FormationModel
{
  public ICollection<LearningElementModel> Elements { get; set; }
}

所以我确实创建了地图:

AutoMapper.CreateMap<LearningElement, LearningElementModel>().ReverseMap();
AutoMapper.CreateMap<Course, CourseModel>().ReverseMap();
AutoMapper.CreateMap<Question, QuestionModel>().ReverseMap();
AutoMapper.CreateMap<Formation, FormationModel>().ReverseMap();

现在,假设我有这个视图模型

var formationModel = new FormationModel();
formationModel.Elements.Add(new CourseModel());
formationModel.Elements.Add(new QuestionModel());

我将映射到一个Formation对象:

var formation = new Formation();
Automapper.Mapper.Map(formationModel, formation);

问题是编队有一个包含学习元素的列表,而不是一个包含Question元素和Course元素的列表。

AutoMapper忽略formationModel.Elements中的元素不是LearningElementModel,而是QuestionModelCourseModel

如何更正此映射?

1 个答案:

答案 0 :(得分:1)

我们可以使用AutoMapper中的Include函数

AutoMapper.CreateMap<LearningElementModel, LearningElement>()
    .Include<CourseModel, Course>()
    .Include<MultipleChoiceQuestionModel, MultipleChoiceQuestion>();