AutoMapper 一个源对象到多个目标对象
AutoMapper one source object to multiple destination objects
我有一个源模型定义为
public class SourceRoot
{
...
public Organisation Organisation { get; set; }
...
}
public class Organisation
{
public long? Id { get; set; }
public string Name { get; set; }
public string Currency { get; set; }
public double SupplementaryAmount { get; set; }
public decimal BaseConversionRate { get; set; }
}
目的地定义为:
public class DestinationRoot
{
...
public Organisation Organisation { get; set; }
public ContributesTo ContributesTo { get; set; }
}
public class Organisation
{
public long? Id { get; set; }
public string Name { get; set; }
}
public class ContributesTo
{
public string Currency { get; set; }
public double SupplementaryAmount { get; set; }
public decimal BaseConversionRate { get; set; }
}
我想从 SourceRoot
映射到 DestinationRoot
从源 Organisation
添加副本到目标 Organisation
AND ContributesTo
.
我有以下 AutoMapper 配置:
public static class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<MyProfile>();
});
return config;
}
}
public class MyProfile : Profile
{
protected override void Configure()
{
this.CreateMap<SourceRoot, DestinationRoot>();
this.CreateMap<Source.Organisation, Destination.Organisation>();
this.CreateMap<Source.Organisation, Destination.ContributesTo>();
}
}
使用此当前配置文件 Organisation
被映射,但 ContributesTo
结果为空。
请注意,我使用的是 AutoMapper 4.2 版,其中静态方法已被弃用,因此我试图避开它。通常我会这样做:
Mapper.CreateMap<SourceRoot, DestinationRoot>()
.ForMember(d => d.ContributesTo, opt => opt.MapFrom( s=> Mapper.Map<ContributesTo>(s.Organisation)));
但不再建议这样做(引用静态方法)。有其他方法吗?
谢谢
只需为 ContributesTo
个目标成员添加映射:
protected override void Configure ()
{
CreateMap<Source.SourceRoot, Destination.DestinationRoot>()
.ForMember(d => d.ContributesTo, opt => opt.MapFrom(s => s.Organisation));
CreateMap<Source.Organisation, Destination.Organisation>();
CreateMap<Source.Organisation, Destination.ContributesTo>();
}
否则 Automapper 发现源和目标根都有 属性 Organisation
,并且它只映射这个 属性。 Automapper 无法理解它应该使用一个 属性 源来映射目标的几个属性(按名称不匹配)。请注意,您不需要为 Organisation
成员指定映射,因为它匹配目标对象中的 属性 名称。
我有一个源模型定义为
public class SourceRoot
{
...
public Organisation Organisation { get; set; }
...
}
public class Organisation
{
public long? Id { get; set; }
public string Name { get; set; }
public string Currency { get; set; }
public double SupplementaryAmount { get; set; }
public decimal BaseConversionRate { get; set; }
}
目的地定义为:
public class DestinationRoot
{
...
public Organisation Organisation { get; set; }
public ContributesTo ContributesTo { get; set; }
}
public class Organisation
{
public long? Id { get; set; }
public string Name { get; set; }
}
public class ContributesTo
{
public string Currency { get; set; }
public double SupplementaryAmount { get; set; }
public decimal BaseConversionRate { get; set; }
}
我想从 SourceRoot
映射到 DestinationRoot
从源 Organisation
添加副本到目标 Organisation
AND ContributesTo
.
我有以下 AutoMapper 配置:
public static class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<MyProfile>();
});
return config;
}
}
public class MyProfile : Profile
{
protected override void Configure()
{
this.CreateMap<SourceRoot, DestinationRoot>();
this.CreateMap<Source.Organisation, Destination.Organisation>();
this.CreateMap<Source.Organisation, Destination.ContributesTo>();
}
}
使用此当前配置文件 Organisation
被映射,但 ContributesTo
结果为空。
请注意,我使用的是 AutoMapper 4.2 版,其中静态方法已被弃用,因此我试图避开它。通常我会这样做:
Mapper.CreateMap<SourceRoot, DestinationRoot>()
.ForMember(d => d.ContributesTo, opt => opt.MapFrom( s=> Mapper.Map<ContributesTo>(s.Organisation)));
但不再建议这样做(引用静态方法)。有其他方法吗?
谢谢
只需为 ContributesTo
个目标成员添加映射:
protected override void Configure ()
{
CreateMap<Source.SourceRoot, Destination.DestinationRoot>()
.ForMember(d => d.ContributesTo, opt => opt.MapFrom(s => s.Organisation));
CreateMap<Source.Organisation, Destination.Organisation>();
CreateMap<Source.Organisation, Destination.ContributesTo>();
}
否则 Automapper 发现源和目标根都有 属性 Organisation
,并且它只映射这个 属性。 Automapper 无法理解它应该使用一个 属性 源来映射目标的几个属性(按名称不匹配)。请注意,您不需要为 Organisation
成员指定映射,因为它匹配目标对象中的 属性 名称。