Automapper和类层次结构

Automapper和类层次结构

问题描述:

鉴于以下来源:Automapper和类层次结构

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的ISN没有映射到DestDerived。是什么赋予了?我是否真的需要在所有派生类型中重复基类属性的映射(我在我的实际代码中有多个子类)。

编辑:

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

+0

什么是确切的错误? – 2011-05-09 20:46:19

请查看这篇文章: 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); 
+0

不,这不适合我们。它真的很奇怪,如果你调用Mapper.Map(source,typeof(SourceDerived),typeof(DestDerived)),那么你的示例代码将失败。没有例外,但也没有进行映射。 – Andy 2011-05-10 12:58:03

+0

我们也调用Mapper.AssertConfigurationIsValid()。我想你会发现,如果你在设置映射后立即添加这个调用,你会在我的文章中提到异常。 – Andy 2011-05-10 13:22:24

+0

感谢您的意见。对不起,我无法帮助! – 2011-05-10 17:28:32