6

鉴于以下来源:

public class SourceBase { public string TheString { get; set; } }
public class SourceDerived : SourceBase { }

和目的地:

public class DestBase { public string MyString { get; set; } }
public class DestDerived : DestBase { }

而这个映射:

  CreateMap<SourceBase, DestBase>()
    .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString))
    .Include<SourceDerived, DestDerived>();

  CreateMap<SourceDerived, DestDerived>();
  Mapper.AssertConfigurationIsValid();  // Exception is thrown here

但是,这会产生一个映射错误,指出 MyString 未映射到 DestDerived。是什么赋予了?我真的需要在所有派生类型中重复基类属性的映射吗(我的实际代码中确实有多个子类)。

编辑:

确切的例外是无法映射 DestDerived 上的以下 1 个属性:MyString。添加自定义映射表达式,忽略或重命名 DestDerived 上的属性

4

1 回答 1

0

请查看这篇文章: http ://groups.google.com/group/automapper-users/browse_thread/thread/69ba514a521e9599

如果您在下面的代码中声明它(使用 AutoMapper 1.1.0.188),它可以正常工作。我不确定这是否能解决您的问题。

var result = Mapper.CreateMap<SourceBase, DestBase>()
                .ForMember(dest => dest.MyString, o => o.MapFrom(x => x.TheString));
               //.Include<SourceDerived, DestDerived>();
            Mapper.CreateMap<SourceDerived, DestDerived>();
            var source = new SourceDerived();
            var destDerived = new DestDerived();
            source.TheString = "teststring";
            var mapResult = Mapper.Map<SourceBase, DestBase>(source, destDerived).MyString;
            Console.WriteLine(mapResult);
于 2011-05-09T21:53:40.720 回答