2012-08-22 28 views
0

我收到一個很好的實現窗體映射嵌套子項的鍵(ID)(請參閱:Mapping a model into a dto and 'include' only the key of child element),但在這裏我搜索一個稍有不同解決方案如下所述。將模型映射到dto和'包含'僅子對<id,string>子元素

我有以下的項目模型:

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

正如你所看到的,每個項目都附加了一些截圖。在下面的函數中,我想檢索一些項目,並且只有一對截圖對應的屏幕截圖+截圖。

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的截圖性質。

任何幫助,非常感謝。

謝謝。

回答

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 
相關問題