Automapper:处理对象到对象映射中的可空属性

4

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

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

然而,似乎Automapper在映射期间将可空属性重建为具有默认值的非可空形式。我希望在下面的代码中newModel保持不变。
预期对象

enter image description here

但我获得

enter image description here

我该如何解决这个问题?如果我检查默认的DateTime和int值,那么我将被限制在使用大于0的值来设置int属性。我需要检查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; }
}
1个回答

0

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

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

而你的映射器使用源先于目标

Mapper.Map(newModel, newViewModel);

1
不,那不是我想做的。我正在从一个可能为空的视图模型映射到一个模型,以便更新模型值。因此,为了进行“部分更新”,我需要忽略来自视图模型对象的空值。你刚刚把事情搞反了。 - flexxxit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接