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

Dan*_* T. 12 c# subclass viewmodel 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; }
}
Run Code Online (Sandbox Code Playgroud)

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

public class ViewModel
{
    public string BaseName { get; set; }
    public string SubName1 { get; set; }
    public string SubName2 { get; set; }
    public string SubName3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

AutoMapper.CreateMap<BaseClass, ViewModel>();
Run Code Online (Sandbox Code Playgroud)

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

var items = Repo.GetAll<BaseClass>();
AutoMapper.Map(items, new List<ViewModel>());
Run Code Online (Sandbox Code Playgroud)

然而,最终发生的事情是只有BaseName财产将被填充ViewModel.我如何配置AutoMapper以便它也将映射子类中的属性?

Jam*_*acs 13

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

public class BaseClass {
    public string BaseName { get; set; }
}

public class Subclass1 : BaseClass {
    public string SubName1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您需要以下视图模型:

public class ViewModel {
    public string BaseName { get; set; }
}
public class ViewModel1 : ViewModel {
    public string SubName1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下代码然后工作:

 Mapper.CreateMap<BaseClass, ViewModel>()
       .Include<Subclass1, ViewModel1>();
 Mapper.CreateMap<Subclass1, ViewModel1>();

 var items = new List<BaseClass> {new Subclass1 {BaseName = "Base", SubName1 = "Sub1"}};
 var viewModels = Mapper.Map(items, new List<ViewModel>());
Run Code Online (Sandbox Code Playgroud)