gpt4 book ai didi

c# - Automapper:处理对象到对象映射的可空属性

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:44 25 4
gpt4 key购买 nike

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

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

但是,在映射 Mapper.Map(newViewModel, newModel) 期间,Automapper 似乎将可空对象属性重新创建为具有默认值的不可空形式。我希望在下面的代码中 newModel 保持不变。

预期对象

enter image description here

但是我明白了

enter image description here

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

最佳答案

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

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

并且您的映射器首先使用源然后使用目标

Mapper.Map(newModel, newViewModel);

关于c# - Automapper:处理对象到对象映射的可空属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com