4

我正在使用 Automapper 6.0.2。我有一个带有以下代码的控制台应用程序。我试图通过放置对象到对象映射关系的条件来实现排序或部分更新功能。所以我正在使用:

.ForAllMembers(opt => opt.Condition(
   (source, destination, sourceMember, destMember) => sourceMember != null))

但是,Automapper 似乎在映射期间将可空对象属性重新创建为具有默认值的不可空形式Mapper.Map(newViewModel, newModel)。我希望在下面的代码中newModel保持不变。

预期对象

在此处输入图像描述

但我明白了

在此处输入图像描述

我该如何解决这个问题?如果我检查默认的 DateTime 和 int 值,我将被限制为 int 属性使用高于 0 的值。我需要检查 null 而不是默认值

public class Program
{
    public static void Main(string[] args)
    {
        Mapper.Initialize(config =>
        {
            config.CreateMap<ViewModel,Model>().ForAllMembers(opt => opt.Condition(
               (source, destination, sourceMember, destMember) => sourceMember != null));
        });


        var newModel = new Model
        {
            Name = "My Name",
            Age = 18,
            DateOfBirth = new DateTime(2000, 1, 1)
        };

        var newViewModel = new ViewModel();

        //Nulls should be ignored while mapping
        Mapper.Map(newViewModel, newModel);
    }
}

public class Model
{
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime DateOfBirth { get; set; }
}
public class ViewModel
{
    public string Name { get; set; }
    public int? Age { get; set; }

    public DateTime? DateOfBirth { get; set; }
}
4

1 回答 1

0

只需按照以下方式更正您的映射

 config.CreateMap<Model, ViewModel>().ForAllMembers(opt => opt.Condition(
               (source, destination, sourceMember, destMember) => sourceMember != null));

并且您的映射器首先使用源然后目标

Mapper.Map(newModel, newViewModel);
于 2017-04-28T11:52:34.753 回答