使用Automapper,是否可以将较小的对象投影到较大的对象上?
例如,控制器接受数据作为 ViewModel 实例。然后我需要在数据库中创建一条记录。所以我会将此视图模型投影到域模型上。一旦我有一个填充了视图模型数据的域模型实例,我将在将数据存储到数据库之前手动填充域模型中的其他字段。
有可能这样做吗?
谢谢。
使用Automapper,是否可以将较小的对象投影到较大的对象上?
例如,控制器接受数据作为 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());
这确保密码不会被 AutoMapper 覆盖。