我读了几篇文章,我看过MvcConf 1中的视频,其中Jimmy Bogard演示了AutoMapper的使用,但我仍然感到困惑。
我有一个User POCO类,它有很多属性。我还有一个RegisterViewModel类,它包含User类属性的子集。现在,当用户注册时,她将把数据填充到传递给视图的空RegisterViewModel实例中。然后,此数据必须映射到要添加到数据库的User实例,但是User上有某些属性需要作为默认值输入(类似于RegistrationDate应该分配给DateTime.Now)。在这种情况下我该怎么做?
此外,假设我正在更新用户实例。首先,我需要从数据库中获取数据并将其映射到UpdateUserViewModel类。然后,当用户提交更改时,必须将这些更改映射回User实例。在这种情况下,我是否需要在配置文件中执行两个单独的Mapper.CreateMap<>()条目,或者AutoMapper会自动为我执行此操作吗?
我想现在就是这样,你的帮助将受到高度赞赏! :)
答案 0 :(得分:5)
对于第一个场景,您可以在映射中定义缺少属性:
Mapper
.CreateMap<RegisterViewModel, User>()
.ForMember(
dest => dest.RegistrationDate,
opt => opt.UseValue(DateTime.Now)
);
对于第二种情况,您需要两个单独的映射,因为AutoMapper不会自动定义双向映射:
Mapper.CreateMap<UpdateUserViewModel, User>();
Mapper.CreateMap<User, UpdateUserViewModel>();