给定这两个对象
public class UserModel
{
public string Name {get;set;}
public IList<RoleModel> Roles {get;set;}
}
public class UserViewModel
{
public string Name {get;set;}
public IList<RoleViewModel> Roles {get;set;} // notice the ViewModel
}
这是进行映射的最佳方式吗?或者 AutoMapper 是否能够进行映射Roles
to Roles
在其自己的?
应用程序配置
Mapper.CreateMap<UserModel, UserViewModel>()
.ForMember(dest => dest.Roles, opt => opt.MapFrom(src => src.Roles));
Mapper.CreateMap<UserViewModel, UserModel>()
.ForMember(dest => dest.Roles, opt => opt.MapFrom(src => src.Roles));
执行
_userRepository.Create(Mapper.Map<UserModel>(someUserViewModelWithRolesAttached);
这是进行映射的最佳方法,还是 AutoMapper 能够自行将角色映射到角色?
如果属性名称相同,则不必手动提供映射:
Mapper.CreateMap<UserModel, UserViewModel>();
Mapper.CreateMap<UserViewModel, UserModel>();
只需确保内部类型也被映射(RoleViewModel
↔ RoleModel
)
然而,这意味着如果您更改源或目标属性名称,AutoMapper 映射可能会默默失败并导致难以追踪问题(例如,如果您更改了UserModel.Roles
to UserModel.RolesCollection
不改变UserViewModels.Roles
).
AutoMapper 提供了Mapper.AssertConfigurationIsValid()
方法将检查所有映射是否有错误并捕获配置错误的映射。有一个与构建一起运行的单元测试非常有用,可以验证此类问题的映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)