使用AutoMapper合并对象

时间:2019-02-28 02:24:47

标签: automapper

我发现this帖子描述了如何在目标对象不为空的情况下有条件地复制值。

除了列表成员外,效果很好,它总是用空列表覆盖它们。我不确定是否只是没有正确配置映射器,或者这是一个错误。以下程序演示了该问题。

namespace automapper_test
{
    using AutoMapper;
    using System;
    using System.Collections.Generic;

    class Program
    {
        class Test
        {
            public int? A { get; set; }
            public string B { get; set; }
            public Guid? C { get; set; }
            public List<Guid> D { get; set; }
        }

        static void Main(string[] args)
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.AllowNullCollections = true;
                cfg.CreateMap<Test, Test>().ForAllMembers(opt => opt.Condition((src, dest, member) => member != null));
            });

            var mapper = config.CreateMapper();

            var source = new Test { A = 2, C = Guid.Empty };
            var target = new Test { A = 1, B = "hello", C = Guid.NewGuid(), D = new List<Guid> { Guid.NewGuid() } };

            mapper.Map(source, target);

            System.Diagnostics.Debug.Assert(target.D.Count == 1);
        }
    }
}

0 个答案:

没有答案