Automapper无法在层次结构上正确映射

时间:2015-12-27 10:42:03

标签: c# automapper automapper-4

我正在使用 Automapper 将接口复制到不同的实现(用于序列化,视图模型,数据库映射等)。

我的代码要复杂得多,但我在下面的代码片段示例中已经解决了这个问题。

考虑以下代码,我是否会遗漏某些内容,因为第二个断言失败

cmath
  

预期:“MyClass”     但是:null

    [Test]
    public void AutoMapperTest()
    {
        Mapper.CreateMap<IMyBaseInterface, MyClass>();
        Mapper.CreateMap<IMyInterface, MyClass>();            
        IMyBaseInterface baseInstance = new MyBaseClass{ MyBaseProperty = "MyBase" };
        var concrete = Mapper.Map<MyClass>(baseInstance);
        concrete.MyClassProperty = "MyClass";
        MyClass mapped = Mapper.Map<IMyInterface,MyClass>(concrete);
        Assert.AreEqual(concrete.MyBaseProperty, mapped.MyBaseProperty);
        Assert.AreEqual(concrete.MyClassProperty, mapped.MyClassProperty);
    }

环境:

Automapper :4.1.1.0 / .Net: 4.5 / VS 2013

2 个答案:

答案 0 :(得分:1)

解决方法: 添加Mapper.CreateMap<MyClass, MyClass>();

我不认为上述是真正的答案。因为这意味着如果我有几个实现,我必须为所有组合创建映射。如果我编写一个新的实现,添加另一个映射,即使在整个时间,它们都实现了相同的接口。

答案 1 :(得分:1)

如果您正在使用继承,并且希望将其与Automapper结合使用,则必须说Automapper此类是这些类的基础,并且这些类是此类的子类。我遇到了同样的问题,只有在我指定了所有的继承关系时才开始工作

最好检查有关继承配置的this doc页面