我正在使用Automapper 6.0.2。我有一个控制台应用程序,下面的代码如下。我试图通过将对象的条件放置到对象映射关系来实现排序或部分更新功能。所以我正在使用:
.ForAllMembers(opt => opt.Condition(
(source, destination, sourceMember, destMember) => sourceMember != null))
然而,在映射Mapper.Map(newViewModel, newModel)
期间,似乎Automapper将可空对象属性重新创建为具有默认值的非可空表单。我希望下面的代码newModel
保持不变。
预期对象
但我得到了
我如何解决这个问题?如果我检查默认的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; }
}
答案 0 :(得分:0)
只需更正您的映射
ta[x]
并且您的映射器首先使用源,然后使用目标
config.CreateMap<Model, ViewModel>().ForAllMembers(opt => opt.Condition(
(source, destination, sourceMember, destMember) => sourceMember != null));