C# AutoMapper don';不管条件如何,都不能忽略null属性 Mapper.Initialize(cfg=> { cfg.CreateMap().FormMember(obj=>obj.LastUpdateDate,opt=> opt.Condition(pre=>pre.LastUpdateDate!=null)); } obj.LastUpdateDate=Datetime.Now; Mapper.map(objDTO,obj);

C# AutoMapper don';不管条件如何,都不能忽略null属性 Mapper.Initialize(cfg=> { cfg.CreateMap().FormMember(obj=>obj.LastUpdateDate,opt=> opt.Condition(pre=>pre.LastUpdateDate!=null)); } obj.LastUpdateDate=Datetime.Now; Mapper.map(objDTO,obj);,c#,automapper,C#,Automapper,映射后,尽管我创建了条件,obj.LastUpdateDate仍将变为null 发生在对象的所有成员上 Automapper 5.02是否为正LastUpdateDate是否为null?Datetime有一个默认值,因此如果您不明确将其设置为null,您的条件将不会捕捉到它 尝试: cfg.CreateMap() .ForMember(dest=>dest.LastUpdateDate,opt=>opt.Condition(c=>c.LastUpdateDate!=null&&c.LastUpd

映射后,尽管我创建了条件,obj.LastUpdateDate仍将变为null

发生在对象的所有成员上


Automapper 5.02

是否为正
LastUpdateDate
是否为
null
Datetime
有一个默认值,因此如果您不明确将其设置为
null
,您的条件将不会捕捉到它

尝试:

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

类程序
{
静态void Main(字符串[]参数)
{
Mapper.Initialize(cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.Number,opt=>opt.Condition(src=>src.Number.HasValue))
.ForMember(dest=>dest.LastUpdateDate,opt=>opt.Condition(src=>src.LastUpdateDate.HasValue));
});
assertConfigurationsValid();
var source=newobjectdto{LastUpdateDate=DateTime.Now};
var destination=newobject{Number=10,LastUpdateDate=DateTime.Now.AddDays(-10)};
var result=Mapper.Map(源、目标);
}
}
公共类对象
{
公共整数?数字{get;set;}
公共日期时间?LastUpdateDate{get;set;}
}
公共类对象
{
公共整数?数字{get;set;}
公共日期时间?LastUpdateDate{get;set;}
}

您是否确定
LastUpdateDate
是否为
null
Datetime
有一个默认值,因此如果您不明确将其设置为
null
,您的条件将不会捕捉到它

尝试:

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

类程序
{
静态void Main(字符串[]参数)
{
Mapper.Initialize(cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.Number,opt=>opt.Condition(src=>src.Number.HasValue))
.ForMember(dest=>dest.LastUpdateDate,opt=>opt.Condition(src=>src.LastUpdateDate.HasValue));
});
assertConfigurationsValid();
var source=newobjectdto{LastUpdateDate=DateTime.Now};
var destination=newobject{Number=10,LastUpdateDate=DateTime.Now.AddDays(-10)};
var result=Mapper.Map(源、目标);
}
}
公共类对象
{
公共整数?数字{get;set;}
公共日期时间?LastUpdateDate{get;set;}
}
公共类对象
{
公共整数?数字{get;set;}
公共日期时间?LastUpdateDate{get;set;}
}
条件在源对象上,而不是目标对象上

因此,通过更好地命名变量,您可以说:

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; }
}
那么,objDTO中有什么?

条件是源对象,而不是目标对象

因此,通过更好地命名变量,您可以说:

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; }
}

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

谢谢你,但不,它是一个可空的日期时间,无论如何它对任何其他属性都不起作用。好的。你能发布一个更完整的例子吗?让我们看看
对象和
对象dto
类以及源对象和目标对象中有什么。没有更多信息很难说,但我更新了我的答案w这是一个工作示例,我认为它符合您的要求。谢谢您,但不,它是一个可空的日期时间,无论如何,它对任何其他属性都不起作用。好的。您能发布一个更完整的示例吗?让我们看看
对象
对象到
类以及源对象和目标对象中的内容。没有更多信息很难说,但我用工作示例更新了我的答案,我想这是你想要的。是的,我知道条件在源对象上,这正是我试图做的,让我的DTO与我的DB对象合并,然后更新DB,但我不想覆盖DTO到DB对象的空值,DTO是一个数据传输对象,顺便说一句,我在公共L中使用了它对于AcknowledgeEyea的所有解决方案,我知道条件在源对象上,这正是我试图做的,使我的DTO与我的DB对象合并,然后更新DB,但我不想覆盖DTO到DB对象的空值,DTO是一个数据传输对象,顺便说一句,我在公共库中使用它来实现所有的解决方案承认
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));