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);
映射后,尽管我创建了条件,obj.LastUpdateDate仍将变为null 发生在对象的所有成员上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
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));