Automapper 6.2.2 有条件地展开?
Automapper 6.2.2 conditional unflattening?
我最近更新到最新版本的 Automapper (6.2.2) 以利用通过 .ReverseMap() 进行的展开。一切似乎都很顺利,直到我意识到它总是在创建一个空对象,而不管扁平化的源属性是否有值。完全可以理解,但为了防止这种情况,我尝试添加一个条件,如下所示:
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.ForMember(d => d.UnflattenedType, o => o.Condition(s => s.FlattenedId.HasValue));
虽然这似乎不起作用,但我一直在寻找解决方案太久了。
所以我的问题是,有没有办法在使用 ReverseMap 时有条件地阻止 automapper 初始化目标对象(展开)?
更新
我已经通过执行以下操作找到了解决方法,但我仍在寻找合适的解决方案。
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.AfterMap((s, d) => d.UnflattenedType = s.FlattenedId.HasValue ? d.UnflattenedType : null);
你试过 ForPath 了吗?
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.ForPath(d => d.UnflattenedType, o => o.MapFrom(s => s.FlattenedId.HasValue ? s.FlattenedId : null));
根据 Automapper 的开发人员的说法,从 6.2.2 版开始,这是不可能的。查看我在 GitHub 上发布的这个问题以获取更多信息:
我最近更新到最新版本的 Automapper (6.2.2) 以利用通过 .ReverseMap() 进行的展开。一切似乎都很顺利,直到我意识到它总是在创建一个空对象,而不管扁平化的源属性是否有值。完全可以理解,但为了防止这种情况,我尝试添加一个条件,如下所示:
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.ForMember(d => d.UnflattenedType, o => o.Condition(s => s.FlattenedId.HasValue));
虽然这似乎不起作用,但我一直在寻找解决方案太久了。
所以我的问题是,有没有办法在使用 ReverseMap 时有条件地阻止 automapper 初始化目标对象(展开)?
更新
我已经通过执行以下操作找到了解决方法,但我仍在寻找合适的解决方案。
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.AfterMap((s, d) => d.UnflattenedType = s.FlattenedId.HasValue ? d.UnflattenedType : null);
你试过 ForPath 了吗?
cfg.CreateMap<Entity, DTO>()
.ReverseMap()
.ForPath(d => d.UnflattenedType, o => o.MapFrom(s => s.FlattenedId.HasValue ? s.FlattenedId : null));
根据 Automapper 的开发人员的说法,从 6.2.2 版开始,这是不可能的。查看我在 GitHub 上发布的这个问题以获取更多信息: