自动映射器投影到更大的对象中

本文关键字:对象 映射 投影 | 更新日期: 2023-09-27 18:37:23

使用自动映射器,是否可以将较小的对象投影到较大的对象上?

例如,控制器接受数据作为 ViewModel 实例。然后,我需要在数据库中创建一条记录。所以我会把这个视图模型投影到一个领域模型上。一旦我用视图模型数据填充了域模型实例,我就会在将数据存储在数据库中之前手动填充域模型中的其他字段。

可以这样做吗?

谢谢。

自动映射器投影到更大的对象中

是的,这是完全可能的。只需创建从 ViewModel 到域模型的映射,并使用Ignore()忽略不存在的属性:

.ForMember(dest => dest.PropertyOnDomainModel, opt => opt.Ignore()) 

小例子:

public ActionResult Register(UserModel model)
{
    User user = Mapper.Map<User>(model);    
    user.Password = PasswordHelper.GenerateHashedPassword();
    _db.Users.Add(user);
    _db.SaveChanges();
}

使用此配置的映射:

CreateMap<UserModel, User>()
    .ForMember(dest => dest.Password, opt => opt.Ignore());

这可确保密码不会被自动映射程序覆盖。