是否可以以这样的方式配置/使用AutoMapper:当我创建来自映射的对象时,我允许所有属性和子集合,但是,当执行时更新到现有对象,映射将忽略子集合属性,因为它们将为空,但我不希望它们被删除。
这是因为我正在使用WCF服务,该服务向对象发送增量更改,并且我的大多数模型都在树层次结构中工作:
Parent
List<Child> Children
ParentDto
List<ChildDto> Children
config.CreateMap<ParentDto, Parent>();
config.CreateMap<ChildDto, ChildDto>();
这很好用,第一次填充子集合。但是,在某些情况下,我将仅使用父POCO属性更改(例如日期时间更改)发送ParentDto,但子列表将为空,因为它们都没有更改。通常我会这样做:
_Mapper.Map<ParentDto,Parent>(dto, local)
但显然会改变整个树并使用空子列表填充本地对象。大规模简化,但会像
_Mapper.Map<ParentDto, Parent>(dto, local).Ignore(p => p.Children)
可能吗?
我还应该添加我使用SimpleInjector DI框架。那么也许有一种方法来注册2个配置,一个配置忽略,一个配置没有?
答案 0 :(得分:1)
Use .ForMember(dest => dest.A, opt => opt.MapFrom(src => src.B))
for mapping only properties you need to update.
答案 1 :(得分:0)
对于那些仍然很难找到这个的人。您可以使用Autommapper Conditional Mapping。
你可以在初始化
中这样做config.CreateMap<ChildDto, ChildDto>().ForMember(dest => dest.Children, opt => opt.Condition(source => source.TriggerChildMap));
这将忽略基于源对象中的属性的映射。要映射您需要使用的现有目标
Mapper.Map(source, destination)
方法而不是var result = Mapper.Map<ChildDto>(source)
属性。