2012-08-22 37 views
0

我有以下的項目模型:映射模型到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; } 
} 

正如你可以看到,每個項目都附有一些截圖。在下面的函數中,我想檢索一些項目,並只檢索相應屏幕截圖的ID。

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 IEnumerable<int> ScreenshotID { get; set; } 

所以我不知道如何在我的DTO映射ScreenshotID。

任何幫助,非常感謝。

謝謝。

回答

0

創建一個映射Screenshotint之間:

Mapper 
    .CreateMap<Screenshot, int>() 
    .ConvertUsing(s => s.ScreenshotID); 

ProjectProjectDTO之間的映射裏使用它:

Mapper 
    .CreateMap<Project, ProjectDTO>() 
    .ForMember(
     dest => dest.ScreenshotID, 
     opt => opt.MapFrom(src => src.Screenshots) 
    ); 

而且當你要映射:

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

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

// at this stage the projectDto.ScreenshotID collection will contain 
// the necessary information 
+0

它編譯,但在運行時,我得到了錯誤「自定義conf成員配置僅適用於某個類型的頂級個人成員。「在Screenshot和int之間的CreateMap上。任何想法?不管怎麼說,還是要謝謝你。 – Bronzato

+0

@Bronzato,看到我更新的答案。 –

+0

謝謝,它工作得很好。現在我在這裏搜索一個稍微不同的實現:http://stackoverflow.com/questions/12070844/mapping-a-model-into-a-dto-and-include-only-the-pair-id-string-of-兒童元素如果你有時間可以看一下嗎?不管怎麼說,還是要謝謝你。 – Bronzato