如何使用AutoMapper进行嵌套映射?

时间:2018-05-04 10:51:25

标签: c# automapper

我有一个实体和模型定义如下:

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }   
    public string LastName { get; set; }    
    public Location Location { get; set; }            
    public string Gender { get; set; }    
    public string Skills { get; set; }    
    public bool isPrivate { get; set; }
}

public class Location
{
    public int Id { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

public class UserModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Location Location { get; set; }
    public bool isPrivate { get; set; }
}

然后,我设置了一个映射配置文件:

public MappingProfile()
{
    CreateMap<User, UserModel>()
        .ReverseMap();
}

关键是这在某种程度上有效,但Location复杂类型未正确映射。通过在LocationCity课程中加入LocationCountryUserModel,我可以随时将其扁平化,但这不是我想做的事情。我希望Location在返回的结果中显示为嵌套属性,因为它是最初定义的。如何在AutoMapper中实现这一目标?

2 个答案:

答案 0 :(得分:1)

您还需要在Location to Location之间添加映射。是的,来源和目的地是一致的。

因此,您的映射配置文件应如下所示:

TextUtils.isEmpty(variable_name)

答案 1 :(得分:0)

您可以像这样定义配置:

 CreateMap<User, UserModel>()
     .ForMember(um => um.Location , opt => opt.MapFrom(u => u.Location))
     .ReverseMap();

ReverseMap只能创建一个简单的映射。对于任何复杂类型,您需要手动配置它,因为AutoMaper并不确切知道如何实例化Location属性,它将返回null引用。