2011-02-24 49 views
1

我读了几篇文章,我已经看到MvcConf 1视频中,吉米·博加德表明AutoMapper的用法,但我仍然感到困惑。混淆使用AutoMapper

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

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

我想,这是现在,您的帮助将不胜感激! :)

回答

5

对于第一种情况下,你可以定义那些缺少在映射属性:

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

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

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

我明白了。非常感谢Darin!我会玩AutoMapper并尝试更熟悉它。 – Kassem

+1

请注意,UseValue和DateTime.Now是不正确的,因为每次都会得到相同的日期,导致很难跟踪错误。看到这个:http://automapper.codeplex.com/workitem/4056 – andreialecu