如何使用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());