簡體   English   中英

Automapper:處理對象到對象映射的可空屬性

[英]Automapper: Handling Nullable Properties for Object To Object Mapping

我正在使用Automapper 6.0.2。 我有一個帶有以下代碼的控制台應用程序。 我試圖通過放置對象到對象映射關系的條件來實現排序或部分更新功能。 所以我正在使用:

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

但是,似乎Mapper.Map(newViewModel, newModel)在映射Mapper.Map(newViewModel, newModel)期間將空值對象屬性重新創建為具有默認值的非空值形式。 我希望在newModel下面的代碼中保持不變。

預期對象

在此處輸入圖片說明

但是我明白了

在此處輸入圖片說明

我該如何解決? 如果我檢查默認的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM