C# 自动将一个源对象映射到多个目标对象

C# 自动将一个源对象映射到多个目标对象,c#,automapper,C#,Automapper,我有一个源模型定义为 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 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
将副本从源
organization
添加到目标
organization
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>();
    }
}
但这不再建议(参考静态方法)。有没有其他方法可以做到这一点


谢谢

只需为
贡献者添加映射到
目标成员:

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>();
}
protected override void Configure()
{
CreateMap()
.ForMember(d=>d.ContributesTo,opt=>opt.MapFrom(s=>s.organization));
CreateMap();
CreateMap();
}

否则,Automapper会发现源根和目标根都有属性
organization
,并且只映射此属性。Automapper无法理解它应该使用源的一个属性来映射目标的多个属性(名称不匹配)。请注意,您不需要为
组织
成员指定映射,因为它与目标对象中的属性名称相匹配。

当答案非常简单时,您在试图找到解决方案时(就像我试图为它做映射一样),会发现这是一件非常困难的事情!谢谢你!
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>();
}