关于使用AutoMapper感到困惑

时间:2011-02-24 22:09:07

标签: asp.net-mvc asp.net-mvc-3 automapper

我读了几篇文章,我看过MvcConf 1中的视频,其中Jimmy Bogard演示了AutoMapper的使用,但我仍然感到困惑。

我有一个User POCO类,它有很多属性。我还有一个RegisterViewModel类,它包含User类属性的子集。现在,当用户注册时,她将把数据填充到传递给视图的空RegisterViewModel实例中。然后,此数据必须映射到要添加到数据库的User实例,但是User上有某些属性需要作为默认值输入(类似于RegistrationDate应该分配给DateTime.Now)。在这种情况下我该怎么做?

此外,假设我正在更新用户实例。首先,我需要从数据库中获取数据并将其映射到UpdateUserViewModel类。然后,当用户提交更改时,必须将这些更改映射回User实例。在这种情况下,我是否需要在配置文件中执行两个单独的Mapper.CreateMap<>()条目,或者AutoMapper会自动为我执行此操作吗?

我想现在就是这样,你的帮助将受到高度赞赏! :)

1 个答案:

答案 0 :(得分:5)

对于第一个场景,您可以在映射中定义缺少属性:

Mapper
    .CreateMap<RegisterViewModel, User>()
    .ForMember(
        dest => dest.RegistrationDate,
        opt => opt.UseValue(DateTime.Now)
    );

对于第二种情况,您需要两个单独的映射,因为AutoMapper不会自动定义双向映射:

Mapper.CreateMap<UpdateUserViewModel, User>();
Mapper.CreateMap<User, UpdateUserViewModel>();