AutoMapper可以将对象映射到相同类型的模型属性

时间:2011-10-12 10:25:25

标签: asp.net-mvc-3 automapper

我正在尝试改进我的MVC 3模型和视图(主要是CRUD)之间的数据流。我采用了使用ViewModels和FormModels的方法。我的ViewModel包含表示视图FormData,DropDownLists等所需的一切.FormModel只包含表单提交的FormData字段,并且是更新记录所必需的。

我的问题是我可以使用AutoMapper将UserDto信息映射到我的ViewModel中的FormData字段吗?

显然我的映射只是两个对象之间的映射而不是属性的对象,但我尝试使用'.ForMember'映射选项,但它们又是对象成员而不是对象成员的对象。我也看了自定义类型转换器,但不确定这是否是正确的方法。

Mapper.CreateMap<UserDto, UserViewModel>();
Mapper.CreateMap<UserViewModel, UserDto>();

public class UserViewModel
{
    public User FormData { get; set; }

    // DropDownLists

    // Other view specific data

}

public class UserFormModel
{
    public int UserId { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Age { get; set; }

    [Required]
    public string Email { get; set; }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

您需要创建FormData属性类型的地图,然后告诉AutoMapper使用此地图。

(以下内容可能无法编译;我正在重新创建工作机器并且正在使用内存工作。)

Mapper.CreateMap<UserDto, User>(); // set up property mapping

Mapper.CreateMap<UserDto, UserViewModel>()
.ForMember(vm => vm.FormData, map => map.MapFrom(dto => Mapper.Map<UserDto, User>(dto)));