【发布时间】:2012-11-13 13:46:26
【问题描述】:
我正在尝试在两个对象列表之间进行映射。源类型具有A 类型的复杂属性;目标类型是A 类型的扁平子集加上源类型中的附加标量属性。
public class A
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Source
{
public A MyA { get; set; }
public int SomeOtherValue { get; set; }
}
public class Destination
{
public string Name { get; set; }
public int SomeOtherValue { get; set; }
}
如果不清楚,我希望 Source.MyA.Name 映射到 Destination.Name 和 Source.SomeOtherValue 映射到 Destination.SomeOtherValue。
实际上,A 类型有十几个属性,其中大约 80% 映射到 Destination 中的同名属性。如果我像这样明确地拼出CreateMap 中的映射,我可以让事情正常工作:
CreateMap<Source, Destination>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MyA.Name));
这里的缺点是我想避免为每个需要复制到Destination 的A 属性添加ForMember 行。我希望我能做这样的事情:
CreateMap<Source, Destination>()
.ForMember(dest => dest, opt => opt.MapFrom(src => src.MyA));
但是,如果我尝试上述操作,我会在注册映射时收到运行时错误:“只有类型上的顶级个人成员才支持成员的自定义配置。”
谢谢
【问题讨论】:
标签: automapper