不管有什么条件,AutoMapper都不会忽略null属性

本文关键字:null 属性 什么 条件 AutoMapper 不管 | 更新日期: 2023-09-27 18:03:52

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<ObjectDTO, Object>().ForMember(obj => obj.LastUpdateDate, opt => 
        opt.Condition(pre =>   pre.LastUpdateDate != null));
}
obj.LastUpdateDate = Datetime.Now;
Mapper.map(objDTO,obj);

映射obj后。不管我创建了什么条件,LastUpdateDate都会变为null。

作用于对象的所有成员。

5.02 Automapper

不管有什么条件,AutoMapper都不会忽略null属性

你确定LastUpdateDatenull吗?Datetime有一个默认值,所以如果你没有显式地将其设置为null,你的条件将无法捕获它。

试题:

cfg.CreateMap<ObjectDTO, Object>()
       .ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(c => c.LastUpdateDate != null && c.LastUpdateDate != default(DateTime)));
编辑:

class Program
{
    static void Main(string[] args)
    {
        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<ObjectDTO, Object>()
                .ForMember(dest => dest.Number, opt => opt.Condition(src => src.Number.HasValue))
                .ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(src => src.LastUpdateDate.HasValue));
        });
        Mapper.AssertConfigurationIsValid();
        var source = new ObjectDTO { LastUpdateDate = DateTime.Now };
        var destination = new Object { Number = 10, LastUpdateDate = DateTime.Now.AddDays(-10) };
        var result = Mapper.Map(source, destination);
    }
}
public class ObjectDTO
{
    public int? Number { get; set; }
    public DateTime? LastUpdateDate { get; set; }
}
public class Object
{
    public int? Number { get; set; }
    public DateTime? LastUpdateDate { get; set; }
}

条件在对象上,而不在目标

为了更好的命名变量你可以说:

.ForMember(dest => dest.LastUpdateDate, opt => opt.Condition(src => src.LastUpdateDate != null));

那么,在你的objDTO中有什么?