AutoMapper:将派生类映射到基类型集合属性

3

我将尝试将两个不同的对象映射到从接口派生的对象。此外,我需要将另一个属性映射到来自数据传输对象的派生类型。给定这个对象结构:

public interface ICoverage
{
    string Name { get; set; }
    string Code { get; set; }
}

public class CoverageA : ICoverage
{
    public string Name { get; set; }
    public string Code { get; set; }
    public string Current { get; set; }
}

public class CoverageB : ICoverage
{
    public string Name { get; set; }
    public string Code { get; set; }
    public bool HasRecord { get; set; }
}

public class Application
{
    public int ApplicationId { get; set; }
    public string Code { get; set; }
    public List<ICoverage> Coverages { get; set; }

    public Application()
    {
        Coverages = new List<ICoverage>();
    }
}

public class StagingDto
{
    public string Referrer { get; set; }
    public string Code { get; set; }
    public CoverageADto CoverageA { get; set; }
    public CoverageBDto CoverageB { get; set; }
}

public class CoverageADto
{
    public string Current { get; set; }
}

public class CoverageBDto
{
    public bool HasRecord { get; set; }
}

这个映射如下所示,但我想知道是否有更好的方法来完成它:
         cfg.CreateMap<StagingDto, Application>()
            .AfterMap((src, dest) => dest.Coverages.Add(new CoverageB()
            {
                HasRecord = src.CoverageB.HasRecord,
                Code = src.Code
            }))
            .AfterMap((src, dest) => dest.Coverages.Add(new CoverageA()
            {
                Current = src.CoverageA.Current,
                Code = src.Code
            }));

理想情况下,我希望避免创建任何扩展方法。
1个回答

0

对我来说,这看起来好一些:

cfg.CreateMap<StagingDto, Application>()
    .ForMember(dest => dest.Coverages,
        opt => opt.ResolveUsing(src => new ICoverage[]
        {
            new CoverageA
            {
                Current = src.CoverageA.Current,
                Code = src.Code
            },
            new CoverageB
            {
                HasRecord = src.CoverageB.HasRecord,
                Code = src.Code
            }
        }));

这也是我偶然发现的另一种选择,我使用了List而不是数组。我同意它看起来更好。谢谢你查看这个! - AvacadoRancher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接