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; }
}