如何使用AutoMapper将多个子类映射到一个类?

假设我有三个类是基类的子类:

public class BaseClass { public string BaseName { get; set; } } public class Subclass1 : BaseClass { public string SubName1 { get; set; } } public class Subclass2 : BaseClass { public string SubName2 { get; set; } } public class Subclass3 : BaseClass { public string SubName3 { get; set; } } 

我想将这些映射到ViewModel类,如下所示:

 public class ViewModel { public string BaseName { get; set; } public string SubName1 { get; set; } public string SubName2 { get; set; } public string SubName3 { get; set; } } 

ViewModel简单地组合了所有子类的属性并将其展平。 我尝试像这样配置映射:

 AutoMapper.CreateMap(); 

然后我尝试从我的数据库中抓取数据,如下所示:

 var items = Repo.GetAll(); AutoMapper.Map(items, new List()); 

但是,最终发生的事情是只在ViewModel填充BaseName属性。 我如何配置AutoMapper以便它也将映射子类中的属性?

AutoMapper中似乎存在一个错误或限制,您需要相应的TSource和TDestination层次结构。 鉴于:

 public class BaseClass { public string BaseName { get; set; } } public class Subclass1 : BaseClass { public string SubName1 { get; set; } } 

您需要以下视图模型:

 public class ViewModel { public string BaseName { get; set; } } public class ViewModel1 : ViewModel { public string SubName1 { get; set; } } 

以下代码然后工作:

  Mapper.CreateMap() .Include(); Mapper.CreateMap(); var items = new List {new Subclass1 {BaseName = "Base", SubName1 = "Sub1"}}; var viewModels = Mapper.Map(items, new List()); 

试试这个:

 AutoMapper.CreateMap() .Include() .Include() .Include(); AutoMapper.CreateMap(); AutoMapper.CreateMap(); AutoMapper.CreateMap(); var items = Repo.GetAll(); AutoMapper.Map(items, new List());