Automapper实例化目标对象,而不是递归地映射

我试图将我的DTO对象映射到工厂类中的实体对象。 DTO具有所有字段值,而实体具有由名称和值组成的字段。

经过一些调试后,我发现Automapper实例化每个实体字段,而不是使用现有字段。 结果,最后一次测试失败。

[TestFixture]
class RecursiveMappingTest
{
    public class SourceInfo
    {
        public string Info1 = "info1";
        public string Info2 = "info1";
    }

    public class StringField
    {
        public string Name;
        public string Value;
    }

    public class DestinationInfo
    {
        public StringField Info1 = new StringField() { Name = "field name 1" };
        public StringField Info2 = new StringField() { Name = "field name 2" };
    }

    [Test]
    public void MapField()
    {
        Mapper.CreateMap<string, StringField>()
            .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src));

        Mapper.CreateMap<SourceInfo, DestinationInfo>();

        SourceInfo sourceInfo = new SourceInfo();
        DestinationInfo destinationInfo = new DestinationInfo();

        Mapper.Map(sourceInfo, destinationInfo);

        // these pass
        Assert.That(destinationInfo.Info1.Value, Is.EqualTo("info1"));
        Assert.That(destinationInfo.Info2.Value, Is.EqualTo("info1"));

        // this fails since automapper instantiated brand new StringField()
        // which has Name == "".
        Assert.That(destinationInfo.Info1.Name, Is.EqualTo("field name 1"));
    }
}

这是预期的行为? 我怎样才能达到我想要的? 实体类中有很多字段,所以这种解决方法对我来说不起作用。


尝试将您的第二张地图更改为:

Mapper.CreateMap<SourceInfo, DestinationInfo>()
.ForAllMembers(x => x.UseDestinationValue());

这应该使用所有未映射属性的目标值。

链接地址: http://www.djcxy.com/p/37423.html

上一篇: Automapper instantiates destination object instead of mapping recursively

下一篇: Convert a string value to an entity in Automapper