Dot-Net
Automapper:使用 ReverseMap() 和 ForMember() 進行雙向映射
我有一種情況,我想將實體映射到視圖模型並返回。我必須明確指定映射,
ForMember()因為它們的屬性不共享完全相同的名稱。這是我的課程的一個簡短範例:public class PartTwo { public int Integer { get; set; } } public class PartTwoViewModel { public int PartInteger { get; set; } }我想以這種方式使用它們:
Mapper.CreateMap<PartTwo, PartTwoViewModel>() .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer)) .ReverseMap(); var partTwoViewModel = new PartTwoViewModel() { PartInteger = 42 }; var partTwo = Mapper.Map<PartTwoViewModel, PartTwo>(partTwoViewModel); Assert.AreEqual(partTwoViewModel.PartInteger, partTwo.Integer);但它與屬性不
PartInteger匹配Integer。(Integer是0。)有沒有辦法使這項工作?(當兩個類的屬性名稱相同時,它可以工作。)我是否必須在方法中設置某種選項
ForMember()?
您可以像這樣定義您的配置:
Mapper.CreateMap<PartTwo, PartTwoViewModel>() .ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer)); Mapper.CreateMap<PartTwoViewModel, PartTwo>() .ForMember(dst => dst.Integer, opt => opt.MapFrom(src => src.PartInteger));更新
這是最初實施的送出。
ReverseMap從我在程式碼中可以看到,它只創建了一個簡單的反向映射。例如,在這種情況下,它會自動配置等價於:Mapper.CreateMap<PartTwoViewModel, PartTwo>();要獲得更複雜的東西,恐怕您將不得不手動配置它。
ReverseMap返回一個IMappingExpression表示反轉的映射。呼叫後,後續呼叫將用於配置地圖的反轉。這是一個例子:
Mapper.CreateMap<CartItemDto, CartItemModel>() .ForMember(dest => dest.ExtendedCost, opt => opt.Ignore()) .ReverseMap() .ForMember(dest => dest.Pricing, opt => opt.Ignore())這將忽略
Pricing相反方向的欄位。