如何仅验证Automapper从Dto到Entity方向的映射
仅验证AutoMapper中Dto到Entity的单向映射方案
要实现仅验证Dto到Entity方向的映射,同时忽略反向验证,可按以下步骤操作:
1. 仅配置单向映射
确保只创建Dto到Entity的映射规则,不要添加反向的CreateMap<Entity, Dto>配置。以你的示例为例:
var configuration = new MapperConfiguration(cfg => { // 仅配置UserDto → User的单向映射,不定义反向映射 cfg.CreateMap<UserDto, User>(); });
2. 定向验证映射配置
使用ValidationContext精准控制验证规则,只检查Dto到Entity的映射有效性:
var validationContext = new ValidationContext(configuration) { // 关闭源成员验证:不检查Entity的属性(如User.Username)是否在Dto中存在 ValidateSourceMemberNames = false, // 开启目标成员验证:检查Dto的属性(如UserDto.Lastname)是否能在Entity中找到对应 ValidateDestinationMemberNames = true, // 指定仅验证UserDto到User的映射(可选,若你有多个映射时更精准) MapsToValidate = new[] { configuration.FindTypeMapFor<UserDto, User>() } }; // 执行验证 configuration.AssertConfigurationIsValid(validationContext);
验证效果说明
- 对于
UserDto.Lastname,因为User中对应的属性是LastName(大小写差异),验证会抛出未找到目标成员的错误,符合你的需求; - 对于
User.Username,由于关闭了源成员验证,不会检查UserDto是否包含该属性,因此不会触发错误。
额外注意
如果之前不小心配置了反向映射(CreateMap<User, UserDto>),需要删除该配置,否则验证仍会检查反向映射的有效性。
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

