DTO到域的自动映射

时间:2014-02-23 13:32:36

标签: ef-code-first automapper code-first dto

我有这样的域名

 public class Person 
{
    public int id { get; set; }
    public string name { get; set; }
    public Gender gender  { get; set; }
}

public class Gender
{
    public int id { get; set; }
    public string description { get; set; }
}

此人的性别属性是查找...这意味着用户选择性别作为下拉菜单的用户界面

public class EmployeeDTO
{
    public int personid { get; set; }
    public string name { get; set; }
    public int genderid  { get; set; }
} 

那么如何设置我的AutoMapper ...将DTO转换为域,反之亦然?

1 个答案:

答案 0 :(得分:1)

实际上,AutoMapper提供开箱即用的对象展平功能,因此这将自动为您完成。

Person person = new Person();
Mapper.CreateMap<Person, EmployeeDTO>()
    .ForMember(dest => dest.personid, opt =>
        opt.MapFrom(src => src.id));   // this line is only because I noticed different property names (id vs personid)
EmployeeDTO employeeDTO = Mapper.Map<EmployeeDTO>(person);
employeeDTO.genderid.ShouldEqual(person.gender.id);

如果在复杂域对象中使用约定OuterProperty.InnerProperty,并且类型匹配正确,则AutoMapper会将其展平为目标对象中的OuterPropertyInnerProperty。你可以在这里阅读所有相关内容:http://github.com/AutoMapper/AutoMapper/wiki/Flattening