4

Automapper 6.0.2 を使用しています。以下のコードを含むコンソール アプリケーションがあります。オブジェクトからオブジェクトへのマッピング関係の条件を設定することで、並べ替えまたは部分的な更新機能を実現しようとしています。だから私は使用しています:

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

ただし、Automapper は、マッピング中に null 許容オブジェクト プロパティをデフォルト値を持つ非 null 許容フォームとして再作成するようです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; }
}
4

1 に答える 1

0

次のようにマッピングを修正するだけです

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

マッパーは最初にソースを使用してからターゲットを使用します

Mapper.Map(newModel, newViewModel);
于 2017-04-28T11:52:34.753 に答える