Asp.net mvc 将模型映射到dto和';包括';只有这一对<;id,字符串>;子元素的定义

Asp.net mvc 将模型映射到dto和';包括';只有这一对<;id,字符串>;子元素的定义,asp.net-mvc,entity-framework,automapper,Asp.net Mvc,Entity Framework,Automapper,我收到了一个很好的实现表单,映射了嵌套子项的键(ID)(请参见此处:),但在这里我搜索了一个稍微不同的解决方案,如下所述 我有以下项目模型: public class Project { [Key] public int ProjectID { get; set; } public string Name { get; set; } public string Description { get; set

我收到了一个很好的实现表单,映射了嵌套子项的键(ID)(请参见此处:),但在这里我搜索了一个稍微不同的解决方案,如下所述

我有以下项目模型:

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; }   
}
如您所见,每个项目都附带了一些屏幕截图。在下面的函数中,我想检索一些项目,并且只检索对应屏幕截图的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;
}
public SearchResultDTO GetProjects(searchParameters projectdto dto)
{
...
var resultDTO=new SearchResultDTO
{
Entities=Mapper.Map(projects.ToList()),
TotalItems=projects.Count()
};
返回resultDTO;
}
以下是项目编号:

[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; }
[DataContract]
公共类ProjectDTO:BaseDTO
{
[数据成员]
公共int ProjectID{get;set;}
[数据成员]
公共字符串名称{get;set;}
[数据成员]
公共字符串说明{get;set;}
[数据成员]
公共词典截图{get;set;}
所以我不知道如何将“ScreenshotID+ScreenshotName”映射到我的DTO的Screenshots属性中

非常感谢您的帮助


谢谢。

您可以定义
屏幕截图
键值对
之间的映射,以及
项目
项目之间的映射到

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

Mapper
    .CreateMap<Project, ProjectDTO>();
Mapper
.CreateMap()文件
.ConvertUsing(s=>newkeyvaluepair(s.ScreenshotID,s.ScreenshotName));
制图员
.CreateMap();
然后:

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
var项目=新项目
{
屏幕截图=新[]
{
新屏幕截图{ScreenshotID=1,ScreenshotName=“name”+1},
新截图{ScreenshotID=2,ScreenshotName=“name”+2},
新屏幕截图{ScreenshotID=3,ScreenshotName=“name”+3},
}
};
var projectDto=Mapper.Map(项目);
//在这个阶段,projectDto.Screenshots字典将包含
//必要的信息
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