Automapper Project尽管映射配置设置为仅知道派生类型,但不将属性映射到派生类型

时间:2018-01-30 16:08:06

标签: c# inheritance automapper transformation projection

我目前面临涉及automapper的问题。 我试图绘制完全无关的类型,除了投影类的属性外,它们完美地工作。我目前无法将它们映射到派生类型。 (信息/数据在源类型中都是可用的,所以它不是关于EF和继承......那部分已经解决了。)

来源/目的地类型

#region DestinationTypes

    private class A
    {
        public List<B> Bs { get; set; }
    }

    private class B
    {
        public string Id { get; set; }
    }

    private class C : B
    {
        public string TestC { get; set; }
    }

    #endregion DestinationTypes

    #region SourceTypes

    private class D
    {
        public List<E> Bs { get; set; }
    }

    private class E
    {
        public string Id { get; set; }
        public string TestC { get; set; }
    }
    #endregion SourceTypes

映射配置

var _cfg =new MapperConfigurationExpression();            
_cfg.CreateMap<E, C>();            
_cfg.CreateMap<D, A>();

 var _config = new MapperConfiguration(_cfg);

版本:6.2.2 预期的行为 我期望一个可疑的地方,其中List Bs充满了类型为C的实例。

实际行为 列表B填充了类型B的实例,而不是类型C。

重现的步骤:

    [TestMethod]
    public void TestProjection()
    {
        int _total = 10;
        var _listOfD = new List<D>();
        for (int _i = 0; _i < 10; _i++)
        {
            var _d = new D();
            _d.Bs = new List<E>();
            for (int _j = 0; _j < _total; _j++)
            {
                var _e = new E();
                _e.Id = $"{_i}_{_j}";
                _e.TestC = $"C{_i}_{_j}";
                _d.Bs.Add(_e);
            }
            _listOfD.Add(_d);
        }
        var _cfg =new MapperConfigurationExpression();            
        _cfg.CreateMap<E, C>();            
        _cfg.CreateMap<D, A>();

        var _config = new MapperConfiguration(_cfg);
        //_config.ResolveTypeMap(typeof(E), typeof(C));
        //_config.CompileMappings();
        var _x = _listOfD.AsQueryable().ProjectTo<A>(_config);
        foreach (var _z in _x)
        {
            var _item = (C)_z.Bs.FirstOrDefault();
            Debug.Assert(_item.TestC != null && _item.Id != null);
        }
    }

0 个答案:

没有答案