簡體   English   中英

AutoMapper將派生類映射到基類型集合的屬性

[英]AutoMapper Map derived classes to property of base type collection

我正在嘗試將兩個不同的對象映射到從接口派生的對象。 另外,我需要從dtos中將另一個屬性映射到派生類型。 鑒於此對象結構:

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
            }));

理想情況下,我不想創建任何擴展方法。

對我來說它看起來好一點:

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
            }
        }));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM