如何使用automapper映射复杂类

时间:2014-12-15 06:32:45

标签: c# asp.net asp.net-mvc

我必须命名空间VM和GM。 两者都有类Employee。 员工包含部门。 我想将VM.Employee映射到GM.Employee。 Mapper不允许我映射部门。

class VM.Employee 
{
    int Id {get;set;}   
    int Name {get;set;}   
    VM.Department dept{get;set;}
}

class VM.Department 
{
    int Id {get;set;}   
    int Name {get;set;}  
}

class GM.Employee 
{
    int Id {get;set;}
    int Name {get;set;}
    GM.Department dept{get;set;}
}

class GM.Department 
{
    int Id {get;set;}
    int Name {get;set;}
}

1 个答案:

答案 0 :(得分:1)

实际上,并不困难。您可以逐字段手动映射,类似于以下内容:

       Mapper.CreateMap<VM.Employee, GM.Employee>()
              .ForMember(vm => vm.Department,
                         mapping => mapping.MapFrom(gm => gm.Department))

       Mapper.CreateMap<VM.Department, GM.Department>()
              .ForMember(vm => vm.SomeFieldOfVmDepartment,
                         mapping => mapping.MapFrom(gm => gm.SomeFieldOfGmDepartment))
              .ForMember(vm => vm.AnotherField,
                         mapping => mapping.MapFrom(gm => gm.AnotherField))

Automapper是基于约定的,当您映射两个类时,它将自动匹配命名相同的字段。但是,当您要映射的类具有不同的字段(名称或字段数不同)时,Automapper可能无法知道您要映射到哪个字段,因此您必须明确告知它。

您当然应该阅读AutoMapper文档以获取更多信息: Automapper Documentation