如果自动播放器不为空/只更改空字段,则它可以忽略目标

时间:2010-12-21 19:37:08

标签: automapper

背景:我正在开发一个web服务,我想允许输入有一个空字段表示“不做更新”。输入对象非常相似但与数据库模型不完全相同,因此我们使用了者自动化来进行转换。

因此,在更新的情况下,我希望能够获取现有值,使用它们覆盖输入中的任何空字段,然后保存它以执行整个更新。 那么,如果目标字段为空,有没有办法让automapper只将值放入目标?

2 个答案:

答案 0 :(得分:2)

是的,它可以,但你可能不想经历麻烦。为此,您需要为要执行此操作的对象上的每个字段设置一个自定义映射处理程序(您可以在相同类型的属性之间共享自定义处理程序,但我不是100%肯定而不看我的一些旧代码。)

答案 1 :(得分:-1)

I recently solved this on my own problem using a PreCondition with Automapper 5.2.0.

CreateMap<Foo, Foo>()
  .ForAllMembers(opt => opt.Precondition(
    new Func<Foo, bool>( foo =>
      if (opt.DestinationMember == null) return true;
      return false;
    )
  ));

This looks at all destination members, and first looks to see if the destination member is null before even looking at the source member. (If it is not null, then it never looks at the source.)