Asp.net mvc 3 AutoMapper能否将对象映射到相同类型的模型属性

Asp.net mvc 3 AutoMapper能否将对象映射到相同类型的模型属性,asp.net-mvc-3,automapper,Asp.net Mvc 3,Automapper,我正在尝试改进MVC3模型和视图(主要是CRUD)之间的数据流。我采用了使用ViewModels和FormModels的方法。My ViewModel包含表示视图FormData、DropDownList等所需的所有内容。FormModel仅包含表单提交的FormData字段以及更新记录所需的字段 我的问题是,我可以使用AutoMapper将用户数据映射到ViewModel中的FormData字段吗 显然,我下面的映射只是两个对象之间的映射,而不是对象到属性的映射,但我尝试使用“.FormMem

我正在尝试改进MVC3模型和视图(主要是CRUD)之间的数据流。我采用了使用ViewModels和FormModels的方法。My ViewModel包含表示视图FormData、DropDownList等所需的所有内容。FormModel仅包含表单提交的FormData字段以及更新记录所需的字段

我的问题是,我可以使用AutoMapper将用户数据映射到ViewModel中的FormData字段吗

显然,我下面的映射只是两个对象之间的映射,而不是对象到属性的映射,但我尝试使用“.FormMember”映射选项,但它们同样适用于对象成员,而不是对象到对象成员的映射。我也看过自定义类型转换器,但不确定这是否正确

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; }
}
Mapper.CreateMap();
CreateMap();
公共类UserViewModel
{
公共用户FormData{get;set;}
//下拉列表
//其他视图特定数据
}
公共类UserFormModel
{
public int UserId{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
公共字符串年龄{get;set;}
[必需]
公共字符串电子邮件{get;set;}
}

任何帮助都将不胜感激。

您需要创建FormData属性类型的映射,然后告诉AutoMaper使用此映射

(以下内容可能无法编译;我正在重新创建我的工作机器,并在内存中工作)

Mapper.CreateMap();//设置属性映射
Mapper.CreateMap()
.ForMember(vm=>vm.FormData,map=>map.MapFrom(dto=>Mapper.map(dto));

您有任何错误吗?确切的问题是什么?当我用Mapper.AssertConfigurationsValid()验证AutoMapper配置是否有效时;它告诉我FormData字段没有映射,我需要添加一个自定义映射表达式,忽略或重命名我知道的属性。如果可能的话,我只需要了解我是如何进行映射的。如果不是,我就手动映射?是的,对于每种类型,您都需要放置映射。非常感谢您的回答,但仍然不起作用。仍然说没有一个属性被映射,我需要进行自定义映射。花了很长时间在这个问题上,所以可能只是手动操作!实际上,我回到了它,并让它与提供的确切代码一起工作。唯一的输入错误是我使用了.ForMember而不是.ForProperty。非常感谢。
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)));