0

ネストされた子のキー(ID)をマッピングする優れた実装フォームを受け取りました(ここを参照:モデルをdtoにマッピングし、子要素のキーのみを「含める」)が、ここでは、以下で説明するように少し異なるソリューションを検索します。

私は次のプロジェクトモデルを持っています:

public class Project
{
    [Key]
    public int      ProjectID       { get; set; }
    public string   Name            { get; set; }
    public string   Description     { get; set; }     
    public virtual  ICollection<Screenshot> Screenshots { get; set; }   
}

そして、私は次のスクリーンショットモデルを持っています:

public class Screenshot
{
    [Key]
    public int    ScreenshotID { get; set; }
    public string ScreenshotName { get; set; }
    public byte[] ScreenshotContent { get; set; }
    public string ScreenshotContentType { get; set; }
}

ご覧のとおり、各プロジェクトにはいくつかのスクリーンショットが添付されています。次の関数では、いくつかのプロジェクトと、対応するスクリーンショットのScreenshotID+ScreenshotNameのペアのみを取得したいと思います。

public SearchResultDTO<ProjectDTO> GetProjects(SearchParametersProjectDTO dto)
{
    ...
    var resultDTO = new SearchResultDTO<ProjectDTO>
    {
        Entities = Mapper.Map<IEnumerable<Project>, IEnumerable<ProjectDTO>>(projects.ToList()),
        TotalItems = projects.Count()
    };
    return resultDTO;
}

ProjectDTOは次のとおりです。

[DataContract]
public class ProjectDTO : BaseDTO<ProjectDTO, Project>
{
    [DataMember]
    public int ProjectID { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Description { get; set; }

    [DataMember]
    public Dictionary<int, string> Screenshots { get; set; }

そのため、「ScreenshotID+ScreenshotName」をDTOのScreenshotsプロパティにマップする方法がわかりません。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

との間のマッピングScreenshotKeyValuePair<int, string>との間のマッピングを定義できます。ProjectProjectDTO

Mapper
    .CreateMap<Screenshot, KeyValuePair<int, string>>()
    .ConvertUsing(s => new KeyValuePair<int, string>(s.ScreenshotID, s.ScreenshotName));

Mapper
    .CreateMap<Project, ProjectDTO>();

その後:

var project = new Project
{
    Screenshots = new[]
    {
        new Screenshot { ScreenshotID = 1, ScreenshotName = "name " + 1 },
        new Screenshot { ScreenshotID = 2, ScreenshotName = "name " + 2 },
        new Screenshot { ScreenshotID = 3, ScreenshotName = "name " + 3 },
    }
};

var projectDto = Mapper.Map<Project, ProjectDTO>(project);

// at this stage the projectDto.Screenshots dictionary will contain 
// the necessary information
于 2012-08-22T11:16:21.313 に答える